问题标签 [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 回答
674 浏览

node.js - 节点集群没有在适当的工作人员中产生幻影实例

我将 NodeJS 与 PhantomJS 一起使用。我的目标是使用节点集群创建 4 个节点实例,每个实例都有 2 个幻像子节点。我的代码如下所示:

集群.js:

App.js 看起来像这样:

因此,cluster.js在节点控制台中运行预期输出后,每 5 秒应该是:

但看起来像这样:

为什么幻影实例没有附加到正确的工作人员?

0 投票
2 回答
769 浏览

node.js - 是否可以在节点集群上运行sails.js?

我目前正在使用节点 js vanilla 集群设置运行快速服务器,如下所示:

http://rowanmanning.com/posts/node-cluster-and-express/

我想将服务器移至sails.js,我想知道是否有人知道如何配置sails 以支持节点集群(没有代理,只是简单的集群)。

德克萨斯州,

肖恩。

0 投票
1 回答
1866 浏览

javascript - Node JS - 记录工作集群最后一个异常

我正在使用 Node JS 服务器 (0.10.30) 及其集群功能。每次工作人员终止时,我都会捕获“退出”事件并重新启动新工作人员。我还想记录(在主集群上)工作人员被终止的原因,例如异常或致命错误。

怎么做?

我的 app.js 文件看起来像这样:

谢谢, 埃雷兹

0 投票
0 回答
423 浏览

node.js - 同一应用程序中的 Express 和 Cluster 节点模块

我正在创建一个允许用户将浏览器中的文件上传到服务器的应用程序。

express我通过输入我的项目的文件夹来启动它。使用该快递创建了所有文件夹等。它创建了一个 bin 文件夹,其中包含一个 www 文件,该文件为我们启动了很多东西,比如端口。

起初我只有一个核心,所以我是这样做的:

最终,我需要使用具有多个内核的机器,以便能够响应更多的客户端请求。所以我正在尝试使用集群模块。

我相应地更改了代码:

问题是,当我这样做时,我在控制台中收到以下错误:

运行:节点 ./bin/www 结果:

发生这种情况是因为我将整个代码放在了主节点的分叉子节点中。任何人都知道为什么会发生这种情况以及我该如何解决?

编辑: 在这里您可以看到设置了端口和其他一些配置的 bin/www 文件:

0 投票
0 回答
262 浏览

json - 将循环 JSON 传递给节点中的集群

我想获得一个多进程节点,与 Sequelize 一起工作。由于您不能调用 Sequelize 的同步方法来一次多次准备好您的 orm(数据库锁定),我决定在主集群上调用同步方法。完成后,fork 进程以匹配 CPU 计数。

但是我显然不能跨叉共享全局变量,如果我尝试通过环境(http://nodejs.org/api/cluster.html#cluster_cluster_fork_env)或与worker.message(data)process.onhttp :// nodejs.org/api/cluster.html#cluster_worker_send_message_sendhandle),它不会发送循环JSON ..

所以我想知道如何将复杂/圆形对象传递给子进程。

有人有什么主意吗 ?

0 投票
1 回答
786 浏览

node.js - 使用带有 SailsJs 的 Node 集群模块:EADDRINUSE

我有一个基于 SailsJs ( http://sailsjs.org/ ) 的应用程序,它必须处理一些 CPU 密集型任务。简而言之,我想使用clusterhttps://nodejs.org/api/cluster.html)模块将这些任务的处理委托给工作进程,这样 Sails 应用程序的主事件循环就不会被阻塞(并且所以可以正常响应请求)。

创建工作人员时,我收到一个EADDRINUSE错误,因为 Sails 试图再次运行并绑定到同一个端口。

示例代码:

运行上述程序时,Sails 应用程序启动,然后在启动两个工作人员时尝试再启动应用程序两次。这会导致以下两个错误:

有没有解决的办法?或者解决这个问题的另一种方法?

0 投票
1 回答
3121 浏览

node.js - 节点集群:如何为每个工作人员分配单独的服务器/端口?

我知道我可以使用 Nodescluster模块来创建多个服务于相同套接字连接的工作人员(来自文档的示例):

但是,如果我不是提供相同的连接,而是希望每个工作人员运行自己的服务器,每个工作人员都在单独的端口上侦听,该怎么办?

0 投票
0 回答
1476 浏览

node.js - 使用 Node Cluster 对单个 TCP 套接字进行循环负载平衡

编码

我有一个集群节点应用程序,它监听 TCP 流量并将二进制数据解析为 JSON 格式。

但这里有一个问题:所有传入流量都来自一个持久连接。

据我了解,集群将通过在工作人员之间分配新的套接字来平衡单个端口上的负载,但是没有本地方法可以在工作人员之间分配单个套接字的负载。

为此,我设置了集群主机以接受传入连接并对消息进行分段。然后,它以循环方式将消息显式传递给集群工作人员。当负责分割消息的流发出一条新消息时,它只需使用集群消息 APIsend将消息发送到行中的下一个 Worker/parser:

Workers 解析消息,使用它发出 HTTP 请求,然后使用集群sendAPI 响应gateway(上面的最后一个代码块)。

问题

将系统置于负载下时,我会遇到奇怪且不可预测的延迟模式。所有 CPU/内存/网络测量都是合理的,并不表示基础设施瓶颈。

问题

如您所见,工作在工作人员之间平均分配,而与给定工作人员的实际吞吐量无关。我的预感是,这就是导致延迟峰值的原因——也许某个地方,某个工作人员正在备份。

有什么方法可以在原则上或经验上证实这一点?也许这只是一厢情愿,但似乎该方法应该只是平均化,不需要工人拉式算法。(这似乎特别棘手,因为我无法推断哪个是认为工作人员空闲的最佳时间——在它完成解析之后?在它收到 HTTP 响应之后?在它向网关发送响应之后?)

我只是对 CPU 调度知之甚少,不知道我是否在追逐红鲱鱼,或者这是否是一个糟糕的算法,肯定会造成麻烦。(如果是这样,任何关于如何改进它的想法都将不胜感激。)

0 投票
1 回答
1542 浏览

node.js - 节点集群:仅向一名工作人员处理任务

我正在尝试将集群设置为对我的应用程序进行多线程处理,但不是为每个工作人员委派一个任务,而是将每个任务委派给所有工作人员。

我的代码如下:

每个工作人员都在处理else块的内容,所以每次我在我的表中插入一个值(触发一个触发器并通知我正在监听的 pg_client)我得到与工作人员设置一样多console.log的 s但是我希望只有一个工作人员cluster.isMaster将处理每个 postgres 事件。如何修复我的代码以实现上述行为?

0 投票
0 回答
307 浏览

node.js - zmq节点js集群

我正在绕圈子解决以下问题,我想将我的 zmq 相关代码分离到单独的模块中,我已经在集群中启动了我的 express 应用程序,如下所示在我的 www.js 文件中

在我的 zmq.js 文件中,我想创建一个推送套接字,但我无法将它绑定到一个端口,因为......好吧,它是绑定连接,因此在第一次集群分叉后会出错。

我可以将我的套接字代码移动到我的 www.js 文件中,但是每当我需要使用我的套接字时,我都必须要求 www 文件。我想将所有与 zmq 相关的东西保存在单独的文件中。任何建议如何让它工作?

更多信息。我尝试在套接字上只调用一次绑定,并将套接字保持在模块/全局范围内,如果我使用它来发送消息,它不会引发任何错误,但我的拉式套接字中没有收到任何消息。我发送时收到的唯一消息是针对我调用绑定的进程,对于进程的其余部分,套接字不为空,但它似乎也没有做任何事情。

www.js

zm.js

我曾尝试使用绑定大师或分叉进程,但似乎都没有工作。

更新:我已经让它暂时工作了,通过在每次 fork 调用中按顺序将套接字绑定到不同的端口,但我确信这不是最好的,如果我找到更好的解决方案,或者其他人会更新请让我知道。