Node.JS事件循环套接字延迟或线程被阻塞

时间:2017-07-19 13:00:48

标签: node.js

发送大量并发请求时,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,但永远不会忘记它,最终运行。

我仔细检查:

  1. console.js每次向server.js发送消息(总是即时)
  2. server.js每次向client.js发送消息(总是即时)
  3. client.js每次向server.js发送消息(总是即时)
  4. [server.js不会立即触发事件message事件,并将其放入 在event pool]
  5. 的最后
  6. server.js每次向client.js发送消息(总是即时)
  7. 我还检查了可能的 I / O主线程块,一切都很好。所有操作都是异步的,没有同步功能。

    这种错误有时会显现,有时则不然。就像在console.js等待之后,您可以打开另一个终端并console.js并发送消息并查看它是如何立即响应的。正如我已经说过的那样,它就像从10开始的概率为1。

    我该如何解决这个问题?我做了很多调试。

0 个答案:

没有答案