WebSocket看似由Google Chrome无缘无故关闭

时间:2017-06-23 06:58:16

标签: javascript node.js sockets websocket socket.io

我正在使用Socket.io与Node.js创建WebSocket连接。在某些时候,我有一个长时间运行的功能,阻止主线程,在这种情况发生后,传输(在这种情况下,websockets)似乎是谷歌Chrome本身关闭。

后端根本没有断开连接消息,@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR return true; } return super.onKeyDown(keyCode, event); } 事件中的消息只是close

有没有人知道这是怎么回事?为什么会这样?我已经玩过Socket.io(transport closepingTimeout)的超时,但这似乎对我的情况没有任何影响。

编辑:好的我已经尝试更改服务器和客户端上的pingIntervalpingTimeout,但无济于事。

以下是我使用的代码:

客户端:

pingInterval

服务器

this._socket = io(location.href, {
    path: `${location.path}socket.io`,
    reconnection: false,
    pingTimeout: 120000,
    pingInterval: 60000
});

2 个答案:

答案 0 :(得分:1)

根据this answer - Controlling the heartbeat from the client中的说明,您有两个问题需要解决:

1)服务器向客户端发送心跳,然后等待响应的一些超时时间。如果没有发回响应,则服务器假定套接字不起作用并关闭它。

2)客户端在一段时间内等待来自服务器的心跳,如果它确实收到了心跳,则它认为套接字无法正常工作并关闭它并尝试重新连接。

因此,要延长套接字无需活动的持续时间,您必须更改连接的客户端和服务器端的时间。仅在客户端上更改它不会使服务器无法关闭它未能获得对其心跳消息的响应的连接。有关如何更改心跳间隔和超时的更多讨论,请访问:Controlling the heartbeat timeout from the client in socket.io

阅读本主题时要非常小心,您正在阅读的内容适用于socket.io 1.x而不是旧版本,因为许多内容都因1.x而改变。

答案 1 :(得分:0)

我想我遇到了同样的问题: Way to prevent socket.io from disconnecting on the client side?

疯狂的是我将pingTimout设置为一个非常高的数字,所以必须有其他东西正在关闭连接。但它似乎与被堵塞的主要线程相关。