自动断开连接原因:
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);
}
}