gpt4 book ai didi

node.js - 套接字.io : best way to find all sockets of a single user

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:46 25 4
gpt4 key购买 nike

我正在尝试制作一个推送通知系统,但要做到这一点,我需要找到正确的方法来向用户的所有事件套接字连接发送一些内容(我们假设登录的 User1 在他的网络浏览器的多个选项卡中打开了我的网站)

因此,当用户连接到他的帐户(带有 session )时,我将所有事件套接字 ID 保存在 MySQL 中:

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 不是对套接字进行排序的最佳方式...

有人有更好的解决方案吗?就像 io.sockets.has('user=1') 或其他魔法?

我还测试了通过对象中的用户 ID 存储每个套接字的解决方案,但性能如何?

最佳答案

尽管使用 Redis 之类的东西来存储套接字 ID,但存储套接字 ID 的策略并不可怕。会比 MySQL 更好。但对于您的情况,您根本不需要存储套接字 ID:只需使用 Socket.io 的 rooms反而。例如,每次用户 #1 建立套接字连接时,在服务器上执行以下操作:

socket.join('user_1');

然后使用以下方式向房间中的每个人(即用户连接的所有套接字)广播:

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

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

房间的完整文档为 on the Socket.io wiki .

关于node.js - 套接字.io : best way to find all sockets of a single user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com