如何为动态聊天室配置高速公路(crossbar.io)

How to configure Autobahn(crossbar.io) for dynamic chat rooms?

本文关键字:crossbar io 高速公路 配置 动态 聊天室      更新时间:2023-09-26

我喜欢 crossbar.io 以及它的工作原理(个人)。但是我想知道如何使用Autobahn(Crossbar.io)为典型的动态聊天应用程序设置架构。

这里的动态聊天是指为每个URL创建单独的聊天室。

例如: http://www.myapplication.com/chat?roomId=123 ,创建一个订阅主题"com.myapp.chat123"的聊天室。

http://www.myapplication.com/chat?roomId=456 ,创建一个订阅主题"com.myapp.chat456"的聊天室。

我们需要将聊天消息存储在数据库中以供将来参考,因为 Autobahn 没有消息持久性。

现在我的问题是:

  1. 如果每个聊天室使用单独的主题,那么我们如何订阅服务器中的消息(因为我们目前无法使用模式订阅)?

  2. 由于我们将为每个房间使用单独的主题,我们如何在 Crossbar.io 中进行身份验证和授权?

  3. 我找不到用于设置此处提到的功能的 Javascript 文档。在哪里可以找到它?

  4. 在这个 SO 答案中,提到 crossbar.io 为路由器上的会话加入或离开提供元事件。有没有办法知道用户何时订阅或取消订阅特定主题而不是路由器加入或离开?

  5. 您能否解释如何使用当前版本的 Crossbar.io 配置可用的高级配置文件功能(在 Javascript、浏览器或 Node.js 中)?

  6. 你能详细解释一下事件历史功能吗?以及如何配置它?

我会一一回答你的问题:

  1. 至少,是你的客户端想要订阅他的主题(如果我误解了,请纠正我),然后,你需要在你的数据库中存储一个与用户相关的主题 ID 列表,当你的客户端连接到服务器时,你向他发送主题 ID 列表并让他订阅所有这些。
  2. 身份验证/授权过程与单独的主题无关。你可以做这样的事情:

    • 有两种身份验证方法,匿名和WAMP-CRA。然后,为匿名连接的客户端分配一个角色,为经过身份验证的客户端分配另一个角色(此角色在数据库之后可能不同,例如:用户、管理员、版主等)
    • 经过身份验证后,订阅主题需要授权(由动态授权方实现,您可以在那里看到如何操作:https://github.com/tavendo/AutobahnPython/blob/master/examples/twisted/wamp/authorization/router.py - 基本上,它是相同的,只是您忘记了路由器的事情,您专注于授权方法)
    • 然后,您根据访问控制之类的内容进行授权。
  3. 不幸的是,该文档已经过时了,您应该在邮件列表中询问您想使用哪些功能以及如何使用它们。
  4. 我记得,有一个元事件on_subscribe/on_unsubscribe。
  5. 高级功能可以在Crossbar的配置文件中配置,它们也可以是传递给发布/订阅/调用/注册调用的参数。
  6. 我不是 Autobahn 的核心开发人员,但据我所知,这是一项功能,可让您从主题中获取所有以前发布的数据(X 最后一个因为时间戳,在 ID 之后)。

我知道由于文档的原因,Autobahn有时很难遵循,但是示例可以有很大帮助,这里有很多有趣的东西:https://github.com/crossbario/crossbarexamples(包括身份验证,元API,模式)。

我希望我已经回答了你的大部分问题,但是,如果你有什么不明白的地方,我建议你去邮件列表,在我看来,这是你最好的尝试。