如何设置一个非常快的node.js UDP服务器

Pan*_*hro 11 javascript udp node.js

我对Node.js很新,我有一个请求,它将接收UDP数据包的有效负载并对其进行处理.

我说的是每秒超过400条消息,达到每秒200,000条消息.

我已经编写了一个代码来设置一个UDP服务器(实际上是从这里的http://nodejs.org/api/all.html#all_udp_datagram_sockets中获取文件)但它丢失了大约5%的数据包.

我真正需要开发的是一个服务器,它将获取数据包并将其发送给另一个工作人员完成该消息的工作.但看起来像node.js中的线程是一场噩梦.

这是我的核心原样:

var dgram = require("dgram");
var fs = require("fs");
var stream = fs.createWriteStream("received.json",{ flags: 'w',
  encoding: "utf8",
  mode: 0666 });

var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
  console.log("server got: " + msg + " from " +
    rinfo.address + ":" + rinfo.port);
    stream.write(msg);
});

server.on("listening", function () {
  var address = server.address();
  console.log("server listening " +
      address.address + ":" + address.port);
});

server.bind(41234);
// server listening 0.0.0.0:41234
Run Code Online (Sandbox Code Playgroud)

Mus*_*afa 3

您缺少概念,NodeJS 并不意味着是多线程的,您的意思是,请求应该在一个循环中处理。不存在其他线程,因此不会发生上下文切换。在多核环境中,您可以通过节点的集群模块创建集群,我在这里有一篇关于此的博客文章。

您将父进程设置为派生子进程,并且只有子进程才应绑定到端口。您的父进程将处理子进程之间的负载平衡。

注意:在我的博客文章中,我做了 i < os.cpus().length / 2;但应该是 i < os.cpus().length;