问题标签 [node-worker-threads]
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.
node.js - 具有内部数据交换的服务器应用程序的工作线程与节点集群
我知道像这样的问题可能是一个见仁见智的问题,这就是我试图提供更多细节的原因。
我正在开发具有以下“功能”的 WebSocket 服务器应用程序:
- 2-3个连接可以指向同一个用户
- 用户有时可以相互交互。无论是突发还是连续数据交换
- 部分全局数据应始终在所有用户之间同步
- 部分全局数据应该在一些用户之间延迟(按需)同步
想到2个可能的结构:
- 工作线程。主线程处理所有网络 IO、连接-> 用户绑定以及存储/与全局数据交互。它还会向工作线程发送大量-s
postMessage
。当来自不同线程的 2 个玩家需要交互时,工作线程偶尔会相互交谈。可能的问题:postMessage
开销(主要来自我所理解的序列化)。理论上,对于大多数消息我可以尝试使用SharedArrayBuffer
. 我不认为它可以在此之外进行优化。- 主线程将处理网络 IO 和全局数据交互。也许这会成为瓶颈?
- 无状态 NodeJS 集群,将所有数据存储在 Redis 中,并利用偶尔锁定。问题/疑问:
- 会使用更多的内存
- 不管 Redis 有多快,与它的通信很可能会比使用
postMessage
-s 慢。 - 多台服务器真的会有用吗?听说将同一种类型的 IO 拆分成多个进程是个坏主意。或者至少不如使用本机 Node 异步 IO 有利。
- 我不认为有一种方法可以基于用户 id 之类的东西来捆绑连接。
- 根据请求获取和设置 Redis 数据很好。但是一个进程如何知道某个键是否被另一个进程修改了呢?
node.js - 如何将nodejs工作人员彼此隔离
我有一个脚本可以执行以下操作
- 从 MongoDB 加载数据,其中计数器
false
有限制 - 为加载的数据集处理计数器更新 MongoDB
true
- 对于每条记录,处理它们并将它们插入到新集合中。
数据太多,因此需要工人加快流程。
问题 - 有时工作人员正在使用其他工作人员正在使用的相同加载数据。这会导致新集合中的重复记录。
我想避免这种情况。
这是我迄今为止所做的,以使我的员工保持敬业度,直到工作完成
这是我的主要功能