从两个端口读取时是否分配负载而不是从50k并发连接中读取单个端口

时间:2015-10-14 11:53:23

标签: node.js load out-of-memory tcp-ip tcpserver

我有一个简单的服务器程序,只读取并发送回复给客户端。连接1000个客户端同时连续地抽取4096字节的数据。但我的服务器崩溃显示内存不足错误。我的分析是消息在缓冲区中累积。      我怀疑的是,当我在同一台服务器上有两个不同的端口从500个客户端接收时,每个端口可能会减少缓冲区中消息的累积?      请帮帮我。

我的节点js服务器代码

    var net = require('net');
    var readline=require('readline');
    var HOST = '10.44.75.21';
    var PORT = 6969;
    net.createServer(function(sock) {
        var i = readline.createInterface(sock, sock);
        console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);

      // Add a 'data' event handler to this instance of socket
      i.on('line', function(data) {

     //console.log('Application Name : ' + data);
     // Write the data back to the socket, the client will receive it as data from the server
     sock.write('Connected to "' + data + '\n"');

     });

    // Add a 'close' event handler to this instance of socket
    sock.on('close', function(data) {
    console.log('CLOSED: ' + sock.remoteAddress +' '+ sock.remotePort);
    });

    }).listen(PORT, HOST);

    console.log('Server listening on ' + HOST +':'+ PORT);

1 个答案:

答案 0 :(得分:1)

这不太可能有所作为。

JavaScript是单线程的。无论你有1个监听端口,还是N个监听端口都无关紧要。请求将一个接一个地处理,并且传入端口不应对内存使用产生任何影响。

更好的解决方案是将负载平衡反向代理放在同一服务器逻辑的多个实例之前,其中每个实例都在侦听不同的端口。

如果有足够的负载,这也会失败,但它会给你带来一些时间 结合auto-recovery scheme,这将保证您的服务器随时可以处理请求。