【问题标题】:nodejs net socket starts dropping connections when on heavy loadnodejs net socket在重负载时开始断开连接
【发布时间】:2015-01-12 16:46:38
【问题描述】:

我正在使用 net.createServer(host, port) + flash 套接字客户端。 当我的游戏运行了几个小时并处于高负载状态时 - 服务器开始断开连接。 客户端收到“已连接”事件,然后立即收到“关闭”事件。 它像这样循环 3-4-5-6 次并连接。 服务器负载不重。有大量的 RAM 和 CPU 资源。

我的代码如下所示:

var net = require("net"); 
server = net.createServer(function(socket) {
                socket.setTimeout(15000);
                socket.setKeepAlive(true);
                //used to store string socket data untill packet delimiter is received
                socket.myBuffer = ""; //(and then process the JSON message)

                socket.on("data", onData); 
                socket.on("error", onError);            
                socket.on("end", onClientDisconnect);
                socket.on("timeout", onClientDisconnect); 
});  
server.listen(port);

如何调试问题?是否有任何类型的代码(我的)可能导致这种情况?

【问题讨论】:

    标签: node.js sockets observers


    【解决方案1】:

    原来是因为我在写东西之前没有检查可写套接字,因为我关闭了 onError 处理程序中的连接。 所以发生的事情是:socket.write(..) 触发错误,因为套接字不可写(虽然已连接)并且在错误时我关闭了套接字,所以客户端开始重新连接,并且循环 3-7 次,直到没有发送例外。

    【讨论】:

    • 写作前不需要检查可写性,但需要检查写作的结果
    • 但这意味着我必须从 onError 处理程序中删除连接关闭代码,这将导致我连接的客户端数组中的套接字挂起。
    猜你喜欢
    • 2012-01-25
    • 2012-03-29
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多