赞
踩
自动断开连接原因:
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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。