【发布时间】:2020-08-15 07:32:36
【问题描述】:
我有一个 node.js 服务器,它有一个接收大量消息的 websocket 连接。该服务器还执行繁重的 cpu 工作。我看到 ws 连接不断丢弃/重新连接/丢弃/等。我的猜测是cpu工作阻塞了主线程这么多,同时ws收到这么多消息,ws连接就失败了?
我最初的解决方案是将所有 cpu 工作转移到一个节点 worker_thread,这有点帮助,但我仍然看到 ws 失去了很多连接。我的想法是,node 在网络 IO 上应该是超级高效的,所以如果我将所有 cpu 工作转移到另一个线程中,网络工作就不会被 cpu 工作阻塞。
服务器是有状态的,这个服务器只能有 1 个,所以我不能只是启动更多。
我不确定如何继续。一些想法是:
- 将 cpu 工作移到另一个进程中,并通过某种进程间通信方法进行通信。但这比 worker_thread 好多少?
- 水平扩展 websockets,所以如果一个失败,其他人将弥补这一缺陷。以这种方式扩展 websocket 似乎相当复杂。
【问题讨论】:
-
"[...] 但我仍然看到 ws 经常失去连接。"这通常意味着您在主循环中仍有一些阻塞代码。出于好奇,你有多少并发连接,服务器每秒收到多少消息?
-
大约 30k 并发连接数,而且这个数字以后只会增加。至于多少 msg/sec,我不知道,但我真的应该知道。我正在使用 crossbar.io,所以它应该有一些用于统计的 API。每个连接每 5 分钟发送 1 条消息,每 10 分钟发送 1 条消息。
标签: node.js kubernetes websocket