发送大量并发请求时,node.js出现问题。问题是,有时似乎它会在event pool
结束时提出一些请求并在一段时间后给我回复(60秒+,正常时间不到10秒)。
故事就是这样,我有3个脚本, CONSOLE , SERVER 和10个 CLIENTS 。
console.js
// sending message
client.connect(port, host, function(connect_socket)
{
client.sendMessage(code:301,... some json-socket message ...);
client.on('message', function(message)
{
if(message.code == 304)
{
console.log(... print data ...)
}
});
}
server.js
server = net.createServer(function(socket)
{
socket = new JsonSocket(socket);
socket.on('message', function(message)
{
if(message.code == 301)
{
var client_random = get_random_client();
client_random.sendMessage(code:302,... some json-socket message ...);
}
if(message.code == 303)
{
var client_return = get_client_by_id(message.return_client_id);
client_return.sendMessage(code:304,... some json-socket message ...);
}
});
});
});
client.js
client.connect(port, host, function(connect_socket)
{
client.on('message', function(message)
{
if(message.code == 302)
{
execute_command(message.data, function(result_command)
{
client.sendMessage(code:303,... some json-socket message (good or bad check) ...)
});
}
});
}
架构概念,控制台向服务器发送消息,服务器向随机客户端发送消息,客户端执行外部程序并将输出发送回服务器,服务器将响应发送回控制台,控制台打印出来。
console.js => server.js => client.js => server.js => console.js
我打开服务器,客户端连接没问题。我打开控制台并输入命令,每次响应都在10秒以内。
现在,我制作了另一个PHP
脚本,可以模拟每秒600个请求。我做同样的事情,打开控制台,发送命令,每10次运行一次(10次中的1次),控制台等待,等待等待, 60秒后它给我结果(10是正常的)。
我进行了一些调试,当server.js
从<{1}}恢复时,client.js
似乎没有触发消息事件,并且将其置于最后 event pool
,但永远不会忘记它,最终运行。
我仔细检查:
message
事件,并将其放入
在event pool
] 我还检查了可能的 I / O主线程块,一切都很好。所有操作都是异步的,没有同步功能。
这种错误有时会显现,有时则不然。就像在console.js
等待之后,您可以打开另一个终端并console.js
并发送消息并查看它是如何立即响应的。正如我已经说过的那样,它就像从10开始的概率为1。
我该如何解决这个问题?我做了很多调试。