【问题标题】:Socket.IO, multiple users different functionalitySocket.IO,多用户不同功能
【发布时间】:2017-07-25 05:24:34
【问题描述】:

我正在尝试创建一个使用socket.io 的多用户和多权限系统,以便使许多功能实时且流畅。

我已经完成了所有设置并在页面加载、查询数据库和基于用户、他们的权限以及他们所属的组中提取相关数据的所有功能,但是我将如何为该用户分配一个套接字,即保留此“用户信息”,例如他们使用的 id 以及您通常在会话数据中找到的其他内容?

据我所见,每当加载、刷新或关闭页面时,套接字 ID 都会重置和更改,因此我无法将此 ID 临时存储在数据库中以供用户查询 - 我有点卡住了解决此问题的最佳方法/实践。

编辑:我应该提一下,除了使用 Express 的套接字端之外,我的应用程序已经构建并且功能齐全。

【问题讨论】:

  • 查看 FeathersJS。我相信它拥有你需要的一切,内置到一个易于使用的后端框架中。如果您不想使用框架,您可以根据用户数据库 ID 在 socket.io 中设置通道。这可能很难实现,所以我建议看看 FeathersJS。

标签: javascript node.js websocket socket.io


【解决方案1】:

您是正确的,用户导航到的每个新页面都会关闭先前的 socket.io 连接并创建一个新的连接,并且每个新的 socket.io 连接都会有一个新的socket.idsocket.id 并不打算用作对特定用户的持久引用。它只是对特定连接的引用。

相反,听起来您想要的是某种用户会话,每次有新的 socket.io 连接时,您都可以持续识别用户。然后,您将使用自己的用户 ID 作为可应用于每个传入 socket.io 连接的持久 ID。

这里通常的方案是使用诸如 express-session 和/或护照之类的东西来设置一个常规的 http 会话。一旦你有了它,你就可以识别所有传入的 http 连接,以确定它们属于哪个用户。由于每个 socket.io 连接都以 http 请求开始,这意味着您可以识别所有 socket.io 连接。为此,您可以同时使用 express-session 和 express-socket.io-session 为您完成大部分工作,或者您可以按照此处所述自行设置:How to share sessions with Socket.IO 1.x and Express 4.x?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2014-03-17
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多