【发布时间】:2020-04-09 14:31:06
【问题描述】:
我有一个带有以下声明的NodeJS socket.io 服务器:
const express = require("express");
const expressApp = express();
const server = http.createServer(expressApp);
const io = require('socket.io')(server, {
pingInterval: 60000,
pingTimeout: 10000
});
ping 间隔是服务器向客户端发送 ping 数据包的时间,而 ping 超时是如果在此期间没有收到 ping 回复,则断开连接的时间。
socket.io 服务器位于 NGINX 服务器后面,该服务器已配置为允许使用推荐的 NGINX 配置进行 socket.io 连接:https://www.nginx.com/blog/websocket-nginx/
在client 中,它正在运行python 并使用此代码连接到服务器。客户端连接一次,除非客户端重新启动或退出,否则不会断开连接。客户端一直在线。
sio.connect(serverUrl + '/socket.io/')
现在的主要问题是,每分钟之后,客户端都会断开连接并连接。这不是我的初衷。最初的目的是删除无效的客户端连接。
鉴于客户端始终在线,为什么每次 [pingInterval] 都会断开连接并连接?
【问题讨论】:
-
您是否尝试降低 pingInterval?你选择了一个相当长的间隔。某些网络基础设施可能会认为这是一个死连接,它正在杀死它。
-
还有,对于非活动连接,nginx 上的相关超时是多少?
-
@jfriend00 我将 pingInterval 降低到 10 秒,现在似乎可以正常工作了。不再有意外断开和重新连接。对于 nginx 设置,我没有指定和超时。我使用了类似的设置,如下所示: location /wsapp/ { proxy_pass wsbackend; proxy_http_version 1.1; proxy_set_header 升级 $http_upgrade; proxy_set_header 连接“升级”; }