如何为动态聊天室配置 Autobahn(crossbar.io)?

Posted

技术标签:

【中文标题】如何为动态聊天室配置 Autobahn(crossbar.io)?【英文标题】:How to configure Autobahn(crossbar.io) for dynamic chat rooms? 【发布时间】:2015-03-20 12:50:53 【问题描述】:

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

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

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

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

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

现在我的问题是:

    如果每个聊天室使用单独的主题,那么我们如何订阅服务器中的消息(因为我们现在无法使用 Patterns 订阅)?

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

    我找不到用于设置 here 中提到的功能的 javascript 文档。在哪里可以找到它?

    In this SO answer,有人提到 crossbar.io 为 Router 上的会话加入或离开提供元事件。有什么方法可以知道用户何时订阅或取消订阅特定的 topic 而不是 Router join 或 leave ?

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

    您能详细解释一下Event History 功能吗?以及如何配置?

【问题讨论】:

【参考方案1】:

我会一一回答你的问题:

    至少,是您的客户想要订阅他的主题(如果我理解错了,请纠正我),然后,您需要在数据库中存储与用户相关的主题 ID 列表,以及当您的客户端连接到服务器时,你把topic ID列表发给他,让他全部订阅。

    身份验证/授权过程与单独的主题无关。你可以这样做:

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

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

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

【讨论】:

以上是关于如何为动态聊天室配置 Autobahn(crossbar.io)?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 ChatApp 制作 ListView 来管理所有聊天?

如何为一对一聊天应用编写 Firestore 规则?

关于如何为聊天应用设计良好架构的建议?

我如何为我的网站用户(如 Y!)制作实时客户端聊天应用程序!信使?

如何为XMPP android的聊天节实现OMEMO加密

如何为传入和传出的聊天消息使用不同的布局