socket.io:查找单个用户的所有套接字的最佳方法

我试图build立一个推送通知系统,但要做到这一点,我需要find正确的方法来发射一些东西到用户的所有活动套接字连接(我们假设login的用户1已经打开我的网站在多个标签他的networking浏览器)

所以,当用户连接到他的帐户(与会话)时,我保存了MySQL中所有活动的socket-id:

user_id | socket_id 1 | 4lf3dsg2bx1u9d # User 1... 1 | 75ksdfzfff1u3d # ...has two active socket connections 2 | GEdsfoorbar1z4 

和我的脚本中的以下内容:

 io.sockets.sockets[socket_id].emit(...) # for each sockets of User1 

但是,我相信MySQL不是sorting套接字的最好方法。

有人有更好的解决scheme吗? 像io.sockets.has('user=1')或者什么魔术?

我也testing了解决scheme,通过用户id在一个对象中存储每个套接字,但性能呢?

您存储套接字ID的策略并不可怕,尽pipe使用像Redis这样的存储方式会比MySQL更好。 但是对于您的情况,您根本不需要存储套接字ID:只需使用Socket.io的房间即可 。 例如,每次用户#1build立一个套接字连接,在服务器上做:

 socket.join('user_1'); 

然后使用以下方法向房间中的所有人(即用户连接的所有sockets)广播:

 io.sockets.in('user_1').emit('event_name', data); 

实际上,您可以检索房间中所有套接字的ID,但唯一真正需要的是计算ID的数量,以查看用户是否仍处于连接状态。

客房的完整文档位于Socket.io wiki上 。