问题标签 [node-cluster]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

node.js - nodejs集群工作者优化

假设我有一个运行 nodejs 应用程序的 12 核 CPU。

该应用程序主要做两件事 -
1. 将上传的视频从一种格式转换为另一种格式(CPU 密集型)
2. 服务其他 DB 密集型 GET/POST 请求

问题:最好创建 2 个服务器 - 一个用于 CPU 工作,另一个用于 DB 工作? 如果我使用集群模块,我应该在每台服务器上生成多少个工作人员?

0 投票
1 回答
63 浏览

node.js - 节点使用所有处理器而不使用集群。怎么来的?

我有一个 nodejs 应用程序,它从一台服务器获取数据并推送到另一台服务器。为了测试,我向我的节点服务器发送了 1000 个请求,并查看了系统监视器上发生的情况。在那里我可以看到所有 4 个处理器都 100% 被占用。

现在,从我在 nodejs 上阅读的内容来看,默认情况下它似乎只使用 1 个线程(这意味着 1 个处理器?)。但是为什么我所有的计算机处理器都被占用了?这种负载平衡是否发生在操作系统级别(我在 ubuntu 14 上)

如果平衡是由操作系统完成的,那么这种自动操作系统级负载平衡和显式使用集群来划分负载之间有什么区别?每个的优点/缺点是什么?

任何帮助将不胜感激:)

0 投票
0 回答
367 浏览

node.js - nodejs express集群一一重启

我只是愚蠢,但我无法弄清楚这一点。我有一个快速服务器,我使用的是默认提供的集群模块(在 6.3.1 上)。我正在使用 apache benchmark 2.4 进行测试:ab -n 50000 -c 10 localhost:3000/api/v1/genders

这就是这种情况,当有人更改配置并发送 akill -SIGHUP <master_pid>时,拦截它,杀死旧工人并重新生成新工人而不关闭服务器。

所以,我有两个版本的代码,第一个

我循环遍历一组工作人员,disconnect每个工作人员和 on disconnectkill工作人员,在kill一个新进程被分叉上。但问题是在某个时间点,没有与服务器的连接,所以我收到一个连接被拒绝错误(61)并且ab死了。

此外,我读到它worker.disconnect并不关心client连接。

在第二个过程中:

我生成了新的叉子,然后一个一个地杀死了旧的叉子,而我没有杀死disconnect,我通过worker.send('shutdown')然后在我做的工人中process.on('message' ...),在这里,我在回调中做 aserver.close和 a process.exit.. 但是现在ab存在说连接由对等方重置。我不明白的是 server.close 不应该处理关闭之前发生的传入连接吗?

所以,

解决这个问题的确切方法是什么,我在哪里做错了?

这里的两个代码,按顺序(相关位):

第一的

第二:(更改位)

0 投票
3 回答
2243 浏览

javascript - 如何在 Windows 上运行节点集群?

有人知道如何在 Windows 上运行 Node Cluster 吗?我在网上找不到任何文章,似乎无法解决这个问题:

而且代码...

0 投票
1 回答
853 浏览

node.js - Socket.io 不适用于节点集群

我有一个带有以下代码的 cluster.js:

当 cluster.js 中的 numOfCpus = 1 时,我的客户端应用程序工作正常。当我有超过 1 个时,socket.io 开始给出以下错误:

在此处输入图像描述

我是否必须做任何特别的事情才能使 socket.io 与多个节点工作人员一起工作?任何帮助将不胜感激。谢谢。

0 投票
1 回答
2465 浏览

javascript - Node.js 集群 - 最佳工作人员数量

我有 4 个内核并根据此示例运行此代码:

使用 4 个叉子(上面的代码),我得到:

功能#0:1698.801ms

功能#1:3282.679ms

功能#4:3290.384ms

功能#3:3425.090ms

功能#2:3424.922ms

用 3 个叉子,我得到:

功能#0:1695.155ms

功能#2:1822.867ms

功能#3:2444.156ms

功能#1:2606.680ms

用 2 个叉子,我得到:

功能#0:1684.929ms

功能#1:1682.897ms

功能#2:1686.123ms

我不明白这些结果。1 fork /core不是最佳数字吗?在这里,我看到 4 叉并不比 2 叉好。

0 投票
1 回答
1450 浏览

javascript - 无法调试节点子进程(使用节点本机调试器)

我正在尝试使用本机节点调试器调试节点子进程。例如,请参阅此repo

我尝试了所有选项之王,根据:debug1debug1debug3(以及我在网上找到的许多其他参考资料)。

这些选项都不适合我..

这是我的示例代码:

index.js:

child.js:

然后我运行:

node --debug-brk --inspect=9222 index.js

我打开了chrome-devtools://devtools/...铬。调试主进程效果很好,我也看到了子进程的输出。唯一不起作用的是子进程的调试......

我在这里做错了什么?

0 投票
2 回答
654 浏览

node.js - NodeJS + Cluster + Socket.IO how to create game room properly?

I'm making a simple game engine, which implements room manipulation.

I was thinking a lot and still have doubts that I'm making rooms not in the valid way.

Here's the scenario.

1) There's one static room, where users are able to 'register'. 2) after certain number of users are registered, it should create dynamic room and put these certain number of users in that room and make them quit the static room.

So, if we run this in multiple instances and let's say we're waiting for 2 users.

2 users join the static room -> create new room (in redis) -> enter these two players in that room (subscribe) -> make those players to leave static room (queue-like system).

Now what I think is a problem.

2 users join the static room -> before creating new room, one other player joins static room (different node instance) -> create new room -> move two players there -> other instance still thinks there's enough users to create new room -> something weird happens.

Is this correct? How should I implement the queue style room?

0 投票
3 回答
1611 浏览

javascript - 如何使用集群处理 Socket.IO 房间?

我有一个与集群一起工作的服务器,并与 socke.IO 一起工作正在实例化进程,每个进程都有特定数量的房间。

  • 服务器
    • 过程 1
      • 房间1
      • 房间2
      • N号房间
    • 过程 2
      • 房间1
      • 房间2
      • N号房间

我将一些用户连接到房间(只有一个进程)的方式是使用路由,用户访问页面以及当他尝试与 Socket.io 建立连接时,我检查 URL 并使用我插入的信息他在一个房间里。

我的问题是用集群实现此服务器我无法将用户插入特定房间,因为有些房间只存在于特定进程中,并且粘性会话将他置于另一个进程中。如何将用户放在另一个进程中的房间中?此外,使用只能查看他在服务器中的进程的路线,我想显示页面中的每个房间。

我已经阅读了有关 Redis-Adapter 的信息,但我没有在 github 上找到使用 Socket.io + Cluster(Sticky-session + redis-adapter) + rooms 的解决方案。

按照我的代码分享我所做的事情:

0 投票
1 回答
1679 浏览

node.js - Mongoose 与集群的连接错误

我遇到了 node.js/cluster 和 mongoose 连接的问题。我不确定我是否可以使用 mongoose 在同一个数据库上连接我的 Web 服务器的多个分支,是吗?

我的代码有一段:

我可以在不使用cluster(不使用代码的第一部分)(或使用cluster但不使用猫鼬...)的情况下运行此服务器,并且当我使用运行此服务器时cluster;工人没有崩溃,但猫鼬连接!

这是json错误:

我真的能够在集群的每个分支中使用猫鼬还是有另一种解决方案?