【发布时间】:2015-12-21 06:11:04
【问题描述】:
我有一个 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:好的,这似乎很明显是通过 Internet 从我的客户端传输超大数据包到 node+ws 服务器的问题。根据 Wireshark 跟踪,一旦达到超大阈值,套接字就会失效,但只有当我远程连接到服务器时。如果服务器在我的本地子网上,超大的数据包会正确传输到服务器。有什么想法可以调试吗?
【问题讨论】: