如何集成 Django 和 XMPP-over-BOSH
Posted
技术标签:
【中文标题】如何集成 Django 和 XMPP-over-BOSH【英文标题】:How do I intgrate Django and XMPP-over-BOSH 【发布时间】:2011-06-20 08:38:47 【问题描述】:我需要一些关于设置基于 Django 和 XMPP 的环境的建议。
我的网站有两个部分。
A 部分:用户在通过 Django 提供服务的页面上使用浏览器内 XMPP 客户端,例如 Strophe.JS。
B 部分:由一组不同的用户用于与使用网站 A 部分进行通信的用户进行通信。此处的用户还将使用浏览器内的 XMPP 客户端,例如在通过 Djano 作为服务器的页面上的 Strope.JS。
由于通信发生在浏览器中,我不会使用真正的 XMPP 流,而是使用 BOSH 上的 XMPP。我读过 XMPP over BOSH 是通过 HTTP 接口传输 XMPP 消息的事实上的方式。
A 部分的解决方案很简单。一个包含 Strophe.JS 库的常规网页。对我来说,困难的部分似乎是弄清楚如何处理 B 部分的用户。我需要在 A 部分用户和 B 部分用户之间中继 XMPP 消息。 Part B 的用户,需要能够为 Part A 的用户从 Django 系统访问信息。我需要 XMPP 和 Django 之间很好的集成。
有人能告诉我如何编写这样的系统吗?我会使用什么工具?我会使用独立的 XMPP 服务器并将其集成到 Django 吗?如果是这样,是什么?当 A 部分的用户发起聊天会话时,它将显示在站点 B 部分的用户上,但哪个用户将处理用户的聊天请求将取决于从 Django 检索到的一些信息。
提前谢谢大家。
【问题讨论】:
您可能想查看the technology behind Convore。 【参考方案1】:您肯定需要独立的 Jabber/XMPP 服务器(例如 ejabberd)。我会大胆猜测 A 部分的用户在聊天室 A (MUC) 中进行通信,而 B 部分中的相同用户在聊天室 B 中进行通信。您需要编写 3 个脚本/守护程序(我使用 perl 和 Net::Jabber (Net::XMPP 不能加入 MUC))。它们是:scripta、scriptb、mediator。
脚本/守护进程 A 将加入 MUC 房间 A,而调解员将成为其名册的一部分。它将收听所有消息节,但只会对一些消息节做出反应(例如,正文为“SendToB MSG”的消息节)。此消息由加入聊天室 A 的用户发送。然后“RelayToB MSG”应由 scripta 发送给中介(发件人:scripta@jabberserver.dom,收件人:mediator@jabberserver.dom)。中介将根据消息节正文的“RelayToB”部分将“RelayFromA MSG”发送到 MUC B。 scriptb 将收到“RelayFromA MSG”并将“MSG”发送到聊天室 B。
用户名册中包含 mediator@jabberserver.dom 的脚本/守护进程 B(相同的逻辑)。
调解员不会加入任何聊天室。它的名册中将包含 scripta@jabberserver.dom 和 scriptb@jabberserver.dom。它只会在聊天室之间中继消息。
我已经在这里How to create a jabber/XMPP proxy/logging service? 发布了示例代码。该代码将应用 scripta/b。代码相当长,请确保检查 InMessage 和 InPresence subs。其他事情与我的需求有关。
我希望我已经足够清楚了。不要犹豫,提出更多问题。
编辑:
-
使用 perl 和 Net::Jabber 创建脚本。将登录到 XMPP 服务器的用户是 mediator@jabberserver.dom。每个人都可以向他发送消息。调解员将以格式(来自:user1 MSG)将消息转发给支持人员。支持人员将使用消息回复 mediator@jabberserver.dom (Reply:user1 REPLY)。中介将回复转发给用户 1。
在此处查看 mod_shared_roster http://www.ejabberd.im/shared-roster-all(示例 4)和此处 http://www.process-one.net/docs/ejabberd/guide_en.html#htoc61。
我认为第二种解决方案除了页面中的 javascript/strophe 代码之外不需要额外的编码。
【讨论】:
你好 Gjorgji。我发现了一些东西speeqe.com。你怎么看?代码位于github.com/thepug/speeqe/wiki。这对您来说是一个很有前途的解决方案吗? Speeqe 似乎创建了一个多用户聊天室,但我需要的是像 FB、GTalk 等这样的两人聊天。 那么我的猜测似乎不正确:)。首先,您能否更详细地解释一下您网站的 A 部分和 B 部分是什么意思。 简单来说:我需要一个来实现实时聊天系统。站点上的用户可以开始聊天,站点背后的支持人员可以为用户提供帮助。消息传递需要基于 XMPP。这是否澄清了它?网站上的用户一次只与一个人聊天,但支持人员正在处理多个聊天。 我想到了两个解决方案,我将在我编辑的答案中详细说明。以上是关于如何集成 Django 和 XMPP-over-BOSH的主要内容,如果未能解决你的问题,请参考以下文章
如何集成 Django 和 react-router-dom?
如何将 Angular/Apollo 客户端与 graphene-django 集成?