首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NodeJS网服务器负载均衡器

NodeJS网服务器负载均衡器
EN

Stack Overflow用户
提问于 2015-09-01 10:23:29
回答 1查看 1.1K关注 0票数 1

我有下面的NodeJS服务器文件,它应该处理以下JSON消息:

  1. 如果收到message作为密钥,发送一些响应。
  2. 如果接收到app作为密钥,则向客户端发送一些DLL

现在,我感兴趣的是处理多个客户机,在本例中,这些客户机将只以Key的形式在JSON中发送消息。

以下是代码:

代码语言:javascript
复制
var net = require('net');
var fs = require('fs');
var util = require('util');
var server = net.createServer(function(c) { //'connection' listener
  console.log('client connected');
  c.on('end', function() {
    console.log('client disconnected');
  });
  c.on('data', function(data) {

    var json = JSON.parse(data.toString());
    if(json.heartbeat){
      if(json.first_fetch === "1"){
        c.write("{\"config_changed\":\"true\",\"config\":\"This is some config\"}"); // JSON Message here
      }
      else{
        c.write("{\"config_changed\":\"false\"}");
      }
    }
    else if(json.message){
        c.write("{\"success\":\"true\"}");
    }
    else if(json.app){
      fs.exists('apps/'+ json.app + ".dll", function (exists) {
        util.debug(exists ? "it's there" : "Its not there");
      });
      var stats = fs.statSync('apps/'+ json.app + ".dll")
      var fileSizeInBytes = stats["size"]
      var message = json.app + "\n" + fileSizeInBytes + "\n";
      c.write(message);
      fs.open('apps/'+ json.app + ".dll","r", function(status, fd){
        console.log(fd);
        var read_bytes = 0;
        var fileStream = fs.createReadStream('apps/'+ json.app + ".dll");
        fileStream.on('data',function(chunk){
          c.write(chunk);

        });
      })

    }
    else
    {
        c.write("{\"some\":\"error\"}");
    }
  });

  c.on('error', function (e) {
    console.log(e);
  });

  // c.pipe(c);
});
server.listen(1936, function() { //'listening' listener
  console.log('server bound');
});

我的客户端将以{"message":"This is message"}的形式发送消息,服务器将发送{"success":"true"}。我收到了我创建的服务器的以下基准测试:

  1. 一个客户在7秒内发送了200000条消息。
  2. 两个客户端,每个客户在13/14秒内发送消息。
  3. 三个客户端,每个在17/17/16秒内发送消息。

当每个客户端向一台服务器发送消息时,它们的时间会大大减少。我试图一次运行多台服务器,但它提供了:

代码语言:javascript
复制
events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EADDRINUSE
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1156:14)
    at listen (net.js:1182:10)
    at Server.listen (net.js:1267:5)
    at Object.<anonymous> (C:\Users\Dell\Desktop\nodeserver\server.js:54:8)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

如果我想获得每个客户端的200K in 7 seconds性能,我应该如何进行。我想运行多个服务器实例,使用负载均衡器来提高服务器效率。我在使用Windows。

EN

回答 1

Stack Overflow用户

发布于 2015-09-01 11:12:12

尝试将node.js集群模块用于此https://nodejs.org/api/cluster.html

不同的nodejs实例不能共享同一个端口

另一种方法是使用外部负载均衡器,例如nginx

balancing.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32329201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档