gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:17:31 32 4
gpt4 key购买 nike

我是 Node.js 的新手,我有一个应用程序的请求,该应用程序将接收 UDP 数据包的有效负载并对其进行处理。

我说的是每秒超过 400 条消息,这将达到大约 200.000 条消息/分钟。

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

我真正需要开发的是一个服务器,它可以获取数据包并将其发送给另一个worker来处理消息。但看起来 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

最佳答案

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

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

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

关于javascript - 如何设置一个非常快的 node.js UDP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10232717/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com