node.js - 使用 WebSockets 和 NodeJs 集群

标签 node.js multithreading performance websocket

我目前有一个与 MongoDB 一起运行的 Node 服务器。它处理一些 HTTP 请求,但主要使用 WebSockets。基本上,服务器使用 WebSockets 将多个用户连接到房间。
我的服务器目前打开了大约 12k 个 WebSockets,它几乎瘫痪了我的单线程服务器,现在我不确定如何转换它。
服务器为连接的用户和房间保存 HashMap 变量。当用户执行操作时,服务器通常会引用那些 HashMap 变量。所以,我不确定如何在这使用集群。我想可能会为每个 WebSocket 消息创建一个线程,但我不确定这是否是正确的方法,并且它无法访问其他用户的 HashMaps
有没有人对该怎么做有任何想法?
谢谢你。

最佳答案

您可以查看 socket.io-redis 适配器以了解架构思想,或者您可以决定使用 socket.io 和 redis 适配器。
他们将相当于你的 hashmap 移动到一个单独的进程 redis 内存数据库,以便所有集群进程都可以访问它。
socket.io-redis 适配器还支持更高级别的功能,因此您可以通过一次调用向房间中的每个套接字发出信号,适配器会找到房间中每个套接字的连接位置,联系该特定集群服务器并让它发送消息给他们。

I thought maybe creating a thread for every WebSocket message, but I'm not sure if this is the right approach, and it would not be able to access the HashMaps for the other users


node.js 中的线程不是轻量级的东西(每个线程都有自己的 V8 实例),因此您不会希望每个 webSocket 连接都有一个 nodejs 线程。您可以在 webWorker 上对一定数量的 webSocket 连接进行分组,但此时,使用集群可能更容易,因为 nodejs 会自动为您处理跨集群的分布,而您必须自己为自己的 webWorker 执行此操作水池。

关于node.js - 使用 WebSockets 和 NodeJs 集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038526/

相关文章:

java - 尝试一次只运行 5 个线程的 selenium webdriver,重复直到运行 200 个线程

javascript - node-serialport 不列出也不检测连接到笔记本电脑的 USB 设备

javascript - 使用 node.js 驱动程序将 Mongo 集合导出到 json

java - 在 Java 中,如何创建一个重用 Git 存储库的线程安全应用程序?

performance - 在 matlab 中使用列零填充将向量 reshape 为矩阵

c# - 性能/风格 : Changing an object by reference vs returning a copy in C#

performance - 在客户端计算机上执行第三方编译的程序

javascript - 从 node.js 应用程序调用 Mongoose Model.save() 时挂起

javascript - 带有 Sequelize 的 Node.js 数据库模块

java - Java中的多个线程导致问题