Node.js nodejs网络套接字在重载时开始断开连接
我正在使用net.createServer(主机、端口)+flash套接字客户端。 当我的游戏运行数小时并达到高负载时,服务器开始断开连接。 客户端收到“已连接”事件,然后立即收到“关闭”事件。 它像这样循环3-4-5-6次并连接。 服务器负载不重。有大量的RAM和CPU资源 我的代码如下所示:Node.js nodejs网络套接字在重载时开始断开连接,node.js,sockets,observers,Node.js,Sockets,Observers,我正在使用net.createServer(主机、端口)+flash套接字客户端。 当我的游戏运行数小时并达到高负载时,服务器开始断开连接。 客户端收到“已连接”事件,然后立即收到“关闭”事件。 它像这样循环3-4-5-6次并连接。 服务器负载不重。有大量的RAM和CPU资源 我的代码如下所示: var net = require("net"); server = net.createServer(function(socket) { socket.setTim
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);
如何调试该问题?有没有任何类型的代码(我的)会导致这样的事情?结果是,我在写东西之前没有检查可写套接字,因为我关闭了OneError处理程序中的连接。
所以发生的情况是:socket.write(..)触发错误,因为套接字不可写(虽然已连接),在出现错误时,我关闭套接字,因此客户端开始重新连接,并循环3-7次,直到发送无异常为止。在写入之前,您无需检查可写性,但您确实需要检查写入的结果,但这意味着我必须从OneError处理程序中删除连接关闭代码,这将导致连接的客户端阵列中挂起套接字。