SocketIO 内部是如何工作的?

How SocketIO works internally?

我对 SocketIO 的工作原理有疑问。

如果我向“room1”发出一个套接字:

socketio.sockets.to(room1).emit('chat.message',data);

并且这个room1在里面注册了10000个session...

这段代码重复10000次是一样的吗?:

 socketio.sockets.to(sessionId).emit('chat.message',data);

这个问题是因为我有一个房间,我只需要向这个房间的一部分发送消息,而且我还有带有 userIds 的微型房间,创建另一个迭代房间的房间可能更复杂socket.emit 并发送到我需要发出此消息的所有微型房间。

每当任何客户端连接到服务器时,它都会自动加入到带有 roomId(一些随机字符串)的房间。当你明确加入另一个房间时,socket 将连接到带有 roomId 的两个房间(无论你指定什么)。

socketio.sockets.to(sessionId).emit('chat.message', data);
socketio.sockets.to(room1).emit('chat.message', data);

两个语句做同样的事情。所以 emit 将向房间广播消息。房间 (sessionId) 只有一个用户,房间 (room1) 可以有多个用户连接。

它在内部调用 socket.io-adpater 的广播方法。

https://github.com/socketio/socket.io-adapter/blob/master/index.js 行:111

它正在迭代每个连接的客户端并发送数据。