gpt4 book ai didi

javascript - Node.js CPU 负载平衡多个 CPU 内核上的 Websocket 客户端

转载 作者:太空宇宙 更新时间:2023-11-03 23:48:42 25 4
gpt4 key购买 nike

我的 node.js 应用程序当前订阅了许多 websocket 服务器,这些服务器开始每秒将大量数据推送到应用程序。此 websocket 客户端应用程序有几个事件处理程序,它们在接收 websocket 数据后执行一些工作。

但是,Node.js 似乎在任何时候都只使用 1 个 CPU 核心,其余核心未得到充分利用。这是预期的,因为 Node.js 使用单线程事件循环模型。

是否可以在多个 CPU 核心上对传入的 Websocket 数据处理进行负载平衡?我明白Node Clusterpm2 Cluster Mode如果您正在运行 websocket 服务器,则能够实现负载平衡,但是 websocket 客户端呢?

最佳答案

从客户端来看,我可以想到以下选项:

  1. 创建一些子进程(可能为您拥有的每个 CPU 核心创建一个子进程),然后在这些子进程之间划分您的 webSocket 连接。

  2. 创建 node.js WorkerThreads(可能为您拥有的每个 CPU 核心创建一个),然后在这些 WorkerThreads 之间划分您的 webSocket 连接。

  3. 创建node.js WorkerThreads(可能为您拥有的每个CPU核心一个)并创建一个工作队列,其中来自各个webSocket连接的每个传入数据都被放入工作队列中。然后,WorkerThreads 定期从队列中分派(dispatch)数据来处理。当他们完成一条数据时,就会从队列中获得下一条数据,依此类推......

如何最好地解决这个问题实际上取决于 CPU 时间主要花在哪里。如果处理传入数据花费了最多时间,那么这些解决方案中的任何一个都将有助于将多个 CPU 应用于该任务。如果是实际接收传入数据,那么您可能需要将传入的 webSocket 本身移动到新的线程/进程,如前两个选项所示。

如果是由于数据量而导致的系统带宽问题,那么您可能需要增加网络连接的带宽,或者可能需要涉及多个网络适配器。

关于javascript - Node.js CPU 负载平衡多个 CPU 内核上的 Websocket 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60139389/

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