我有一个使用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发送错误。 数据只是停止流动。
更新2:好吧,这似乎非常明显是来自我的客户端传输超大数据包的问题,通过Wireshark跟踪,一旦超过阈值,套接字就会失效,但仅当我远程连接到服务器时才会发生。 如果服务器在我的本地子网上,超大数据包将正确传输到服务器。 有什么想法可以调试吗?