我有一个Node.js + ws服务器和Qt客户端。我有一个问题与websocket连接在某些条件下意外关闭。在我的客户机中,我遍历对象列表并向服务器发送一系列请求。然后,服务器访问数据库,然后将响应写回客户机。下面是(简化的)基本服务器循环:
// ...
var httpServer = http.createServer(//params);
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ server: httpServer });
// ...
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(msg) {
handleRequest(JSON.parse(msg), function (err, result) {
if (err) throw err;
ws.send(JSON.stringify(result), function ack(error) {
if (error) throw error;
}
}
});
});
如果我限制来自客户端的请求数量,一切都可以正常工作。但是,如果我达到了临界数量的请求,数据将停止从服务器返回,并且websocket连接超时。
我想知道我是否需要在每次写入之前或之后冲洗服务器上的websocket ?QtWebSocket有一个flush()方法,但是我没有在ws文档中看到这个功能。如有任何意见,不胜感激。
更新:我还应该注意,没有错误被发送到ws或wss。数据停止流动
UPDATE 2:好的,这似乎很明显是一个问题,从我的客户端通过互联网向节点+ws服务器传输超大数据包。根据Wireshark的跟踪,一旦达到超大阈值,套接字就会崩溃,但只有在我远程连接到服务器时才会这样。如果服务器在我的本地子网内,则超大数据包可以正常发送到服务器。有什么想法如何调试这个吗?
这个问题在我更换了一个路由器后就解决了。我认为这是旧路由器的硬件问题。这是消费级硬件,所以我希望这在生产中不会成为问题。这确实让我想知道在互联网上有多少这样的bug…