WebSocket心跳机制防止自动断开连接

自动断开连接原因:

        WebSocket默认一分钟内未通信会自动断开连接;

解决方法:

        方法一: 设置一下nginx的proxy_read_timeout,但是这个时间过长会影响服务器性能;

        方法二:增加心跳机制;

        心跳机制原理:客户端每隔60s向服务器发送一条ping消息,服务端收到消息后将该消息返回,即完成了一次心跳检查;

代码实现

客户端:

function websocketOpen(e) {
  setInterval(() => {
    const data = {message: 'heartbeat' }
    websock.send(JSON.stringify(data))
  }, 55000)
} 

服务端:

    /**
     * 接受消息处理消息
     * 1分钟心跳监听,客户端发送消息,服务端返回消息即完成一次心跳监听
     * @param session
     * @param webSocketMessage
     */
    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage webSocketMessage) {
        logger.info("[heartbeat]->handleMessage={}", webSocketMessage.getPayload());
        try {
            session.sendMessage(webSocketMessage);
        } catch (IOException e) {
            logger.error("handleMessage sendMessage occer exception:", e);
        }
    }

你可能感兴趣的:(websocket)