我正在尝试创建一个使用socket.io
的多用户和多权限系统,以便使许多功能实时且流畅。
我已经完成了所有设置并在功能上处理页面加载,查询数据库并根据用户,他们的权限以及他们所属的组来提取相关数据,但是我将如何为此用户分配一个套接字,保留此“用户信息”,例如他们使用的ID以及您在会话数据中常见的其他内容吗?
从我所看到的,套接字ID会在页面加载,刷新或关闭时重置和更改,因此我无法暂时将此ID存储在数据库中以防止用户查询 - 我有点卡在上面这是解决这个问题的最佳方法/实践。
编辑:我应该提一下,我的应用程序已经构建完全功能,除了使用Express的套接字外。
答案 0 :(得分:0)
用户导航到的每个新页面都将关闭先前的socket.io连接并创建一个新的,并且每个新的socket.io连接将有一个新的socket.id
。 socket.id
并不意味着用作对特定用户的持久引用。它只是对特定连接的引用。
相反,它听起来像你想要的是某种用户会话,你可以在每次有新的socket.io连接时持久地识别用户。然后,您将使用自己的userID作为持久性ID,可以应用于每个传入的socket.io连接。
这里通常的方案是使用express-session和/或passport等设置常规的http会话。完成后,您可以识别所有传入的http连接,以确定它们属于哪个用户。由于每个socket.io连接都以http请求的形式启动,这意味着您可以识别所有socket.io连接。要做到这一点,您可以同时使用快速会话和express-socket.io-session为您完成大部分工作,也可以按照此处的说明自行设置:How to share sessions with Socket.IO 1.x and Express 4.x?