我们无法可靠地重现此内容,但这是对服务器设置和问题的描述。
我们正在Node.JS / Express服务器上运行socket.io 2.2.0。
大约12个小时后,我们的服务器对台式机Chrome和Firefox上的客户端发出的排放无响应。它继续在Edge,Safari和移动版Chrome / Safari上运行。
例如:
服务器:
io.on('connection', (socket) => {
socket.on(‘test’, (data) => {
console.log(“This is a test”)
})
})
客户:
this.socket.emit(‘test’)
在此示例中,我们看到了服务器正常运行的前12个小时左右的预期行为。客户发出后,就会立即触发“这是一个测试”。
此后,也许由于服务器上的负载逐渐增加(尽管我们通常一次最多连接不超过20个客户端),服务器停止监听客户端。尽管已验证客户端发出了“测试”,但服务器从未记录“这是测试”。同样,这仅发生在台式机Chrome和台式机Firefox上。
这似乎很奇怪,因为如果服务器超载-当客户端数量减少时它应该可以恢复。此外,为什么超负荷突然会永久禁用Chrome和Firefox向我们的服务器发送排放的功能?我们知道通过查看网络日志可以从客户端建立websocket连接。我们还看到该连接正在发送ping,但从未收到来自服务器的pong。
Chrome和Firefox套接字继续正常运行。