@ServerEndpoint("/websocket/{id}")
@Component
public class DemoSocket {
static final Logger log = LoggerFactory.getLogger(DemoSocket.class);
public volatile static Map<String, Session> map = new ConcurrentHashMap<>();
@OnOpen
public void open(@PathParam("id") String id, Session session) {
if (!map.containsKey(id)) {
map.put(id, session);
}
}
@OnClose
public void onclose(@PathParam("id") String id) {
try {
if (map.containsKey(id)) {
map.get(id).close();
log.info("had close this socket");
map.remove(id);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@OnMessage
public void onMessage(String message, Session session) {
log.info("websocket received message:" + message);
try {
session.getBasicRemote().sendText("websocket received user" + message);
} catch (IOException e) {
e.printStackTrace();
}
}
@OnError
public void onError(Session session, Throwable error) {
log.info("error" + error.getMessage());
}
public void SendMessage(String id, String strResult) {
try {
if (map.containsKey(id)) {
log.info("推送当前结果到" + id);
map.get(id).getBasicRemote().sendText(strResult);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}