Nodejs multi-node还有人用吗?
Nodejs multi-node还有人用吗?
<p>第一次用就报错了,去github上看了看,都有这个问题,只有一个临时的解决方案,已经一年没更新了,这个项目被遗弃了吗?</p>
Node.js Multi-Node 还有人用吗?
在现代的 Node.js 开发中,multi-node
(多节点)的概念仍然有一定的应用场景,尤其是在需要处理大量并发请求或需要水平扩展的场景下。尽管 multi-node
项目可能没有得到持续的维护和更新,但类似的功能可以通过其他方式实现,例如使用集群模式、负载均衡器等。
示例代码:使用 Node.js 的内置集群模块
Node.js 提供了一个内置的集群模块,可以用来创建多个工作进程来处理不同的连接。这种方式可以帮助你充分利用多核 CPU 的性能,并且无需依赖第三方库。
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`主进程运行于 PID ${process.pid} 上`);
// 创建多个工作进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${worker.process.pid} 已退出`);
});
} else {
// 工作进程可以开始处理请求
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World\n');
}).listen(8000);
console.log(`工作进程 ${process.pid} 正在监听端口 8000`);
}
解释:
-
主进程:
- 使用
cluster.isMaster
判断当前进程是否为主进程。 - 获取系统中的 CPU 数量,并根据该数量创建相应数量的工作进程。
- 监听工作进程的退出事件,并在进程退出时打印日志。
- 使用
-
工作进程:
- 使用
cluster.fork()
方法创建新的工作进程。 - 在每个工作进程中,创建一个 HTTP 服务器并监听指定端口(本例中为 8000)。
- 使用
通过这种方式,你可以利用多核 CPU 的能力来提高应用的并发处理能力,而无需依赖已弃用或不活跃的第三方库。这种方式不仅简单而且可靠,是目前较为推荐的做法。
<p>可以直接用cluster,效果一样,这个项目应该是废弃了。</p> <p>没人回复新人吗?只好自问自答了</p>
cluster还是不行,在一台机子上,一旦节点阻塞也不会把http请求分配给其他进程,始终用该进程,真蛋疼,一个节点挂了,倒可以迁到另一个节点上。
看来自带cluster只有单机容灾,没有负载均衡。 不过还有node-cluster,准备试试这个。
我用 AWS 的 balancer, balancer后面挂上n个运行 nodejs 的servers.
谢谢,我想通了。 nodejs的cluster是单机的,单机上负载均衡也没啥意义。 还是用n个node再在前面加balancer的好。
我想nodejs的cluster可以用在多核的机器上用来处理计算量大的工作。多节点可以充分利用多核的处理器。
Load balancing 还是用 balancer.
compute-cluster这个网上介绍的好像也不错
标题:Node.js Multi-Node还有人用吗?
内容:
Node.js 的 multi-node 模块曾经是一个流行的模块,用于在多核 CPU 上扩展 Node.js 应用程序。不过,随着时间的推移,一些替代方案如 cluster
模块(内置模块)和第三方库如 pm2
及 strong-pm
出现,multi-node 的使用频率有所下降。
虽然 multi-node 项目的维护可能不如以前活跃,但它仍然有一些用户。如果你遇到了错误并且发现该问题已经有一段时间没有得到解决,你可以考虑以下几个选择:
- Cluster 模块:Node.js 自带的
cluster
模块可以让你创建多个 worker 进程来处理负载。 - PM2:这是一个非常强大的进程管理器,可以帮助你更轻松地管理和扩展你的应用。
- Strong-PM:这是一个由 StrongLoop 提供的生产级进程管理器,它与 Node.js 生态系统紧密集成。
如果你决定继续使用 multi-node,可以尝试通过以下方式解决问题:
// 示例:使用 Node.js 内置的 cluster 模块
const cluster = require('cluster');
const os = require('os');
if (cluster.isMaster) {
const numCPUs = os.cpus().length;
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
});
} else {
// Worker 端
require('./app'); // 引入你的应用程序入口文件
}
这段代码使用了 Node.js 内置的 cluster
模块来利用所有可用的核心来扩展你的应用。如果你需要一个更高级的解决方案,推荐使用 PM2 或 Strong-PM,它们提供了更多功能,如自动重启、日志管理和资源监控等。