Socket.io 性能优化 15'000 个用户

Zer*_*lve 6 javascript performance websocket node.js socket.io

我有一个带有巨大聊天室的聊天应用程序(15'000 个用户连接到一个房间)。只有少数人有写的权利,所以理论上应该不会有很大的负担。我注意到存在性能问题:当仅发送一条消息时,服务器 CPU 负载飙升至 30%-50%,并且消息传递缓慢(如果写入多条消息,可能会晚 1 秒或更糟)我分析了具有临床火焰的性能。我发现这段代码是问题所在: socket.to("room1").emit(/* ... */);它将send()在engine.io 和 库clearBuffer中触发ws

有人知道我是否做错了什么以及如何优化性能?

火焰图

Ala*_*ine 3

您可以对 sokets.io 服务器进行负载平衡。

我还没有这样做,但你有关于这样做的信息:https ://socket.io/docs/v4/using-multiple-nodes

如果您使用node.js作为http服务器: https: //socket.io/docs/v4/using-multiple-nodes#using-nodejs-cluster

或者,您可以考虑使用 redis。有一个包允许在进程或服务器集群上分配流量:

https://github.com/socketio/socket.io-redis-adapter