webSocket通用模板

@ServerEndpoint("/websocket/{userId}")
@Component
public class WebSocketServer {

    private Logger logger = LoggerFactory.getLogger(WebSocketServer.class);

    //concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
    private static ConcurrentHashMap webSocketSet = new ConcurrentHashMap<>();

    // 会话
    private Session session;

    // 用户id
    private Long userId;

    // 收到请求后调用的方法
    @OnMessage
    public void handleMessage(Session session, String message) {
        logger.info("收到客户端的请求");
    }

    // 连接建立成功调用的方法
    @OnOpen
    public void onOpen(Session session, @PathParam("userId")Long userId){
        logger.info("建立webSocket的连接");
        this.session = session;
        this.userId = userId;
        webSocketSet.put(userId, this);
    }

    // 连接关闭调用的方法
    @OnClose
    public void onClose() {
        logger.info("关闭socket连接");
        webSocketSet.remove(userId);
    }

    // 发生错误调用的方法
    @OnError
    public void onError(Session session, Throwable err) {
        logger.info("发生错误");
        err.printStackTrace();
    }

    // 服务器主动发消息, 给指定的用户发消息
    public void sendMessage(String message, Long userId) {
        try {
          if(webSocketSet.get(userId) != null) {
              webSocketSet.get(userId).sendMessage(message);
          }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void sendMessage(String message) throws IOException {
        this.session.getBasicRemote().sendText(message);
    }

}

 

你可能感兴趣的:(Java)