Zerotwelve
Zerotwelve

Reputation: 2361

Socket.io Performance optimisation 15'000 users

I have a chat application with huge chatrooms (15'000 user connected to one single room). Only few have the right to write, so theoretically there should not be a huge load. I have noticed that there are performance issue: when only one message is send, the server CPU load spikes to 30%-50% and the message gets delivered slowly (maybe 1 second later or worse if you write multiple messages) I have analysed the performance with clinic-flame. I see that this code is the problem: socket.to("room1").emit(/* ... */); which will trigger send() in engine.io and clearBuffer in the ws library.

Does someone know if I am doing something wrong and how to optimize the performance?

flame graph

Upvotes: 8

Views: 4155

Answers (1)

Alaindeseine
Alaindeseine

Reputation: 4513

You can load balance sokets.io servers.

I haven't do this yet, but you have informations about doing this here: https://socket.io/docs/v4/using-multiple-nodes

If you use node.js as http server : https://socket.io/docs/v4/using-multiple-nodes#using-nodejs-cluster

Alternatively, you can consider using redis for that. There is a package that allow to distribute trafic on a cluster of process or server:

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

Upvotes: 4

Related Questions