如何将Django和XMPP-over-BOSH集成在一起

时间:2011-06-20 08:38:47

标签: django xmpp bosh

我需要一些关于设置基于Django和XMPP的环境的建议。

我的网站分为两部分。

A部分:用户使用浏览器内的XMPP客户端,如Strophe.JS,通过Django提供服务。

B部分:由不同的用户组用于与使用站点A部分进行通信的用户进行通信。这里的用户还将使用浏览器内的XMPP客户端,如Strope.JS,这是一个通过Djano服务器的页面。

由于通信发生在浏览器中,我不会使用真正的XMPP流而是使用XMPP而不是BOSH。我已经读过,BOSH上的XMPP是通过HTTP接口传输XMPP消息的事实上的方式。

A部分的解决方案很简单。抛出Strophe.JS库的常规网页。对我来说,困难的部分似乎是要弄清楚如何处理B部分的用户。我需要在A部分用户和B部分用户之间传递XMPP消息。 B部分用户需要能够从部分A的用户那里访问Django系统的信息。我需要在XMPP和Django之间进行很好的集成。

有人能告诉我如何编写这样的系统吗?我会用什么工具?我会使用独立的XMPP服务器并将其集成到Django吗?如果是这样,什么?当A部分的用户启动聊天会话时,它将显示在该站点的B部分的用户上,但是哪个用户将处理该用户的聊天请求将取决于从Django检索的一些信息。

先谢谢大家。

1 个答案:

答案 0 :(得分: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.

  • 脚本/守护进程B(相同的逻辑),mediator@jabberserver.dom在用户名单中。

  • 调解员不会加入任何聊天室。在它的名单中将有scripta@jabberserver.dom和scriptb@jabberserver.dom。它只会在聊天室之间传递消息。

我已在此处发布示例代码How to create a jabber/XMPP proxy/logging service?。代码将应用scripta / b。代码相当长,请确保检查InMessage和InPresence潜艇。其他事情关系到我的需求。

我希望我足够清楚。不要犹豫,提出更多问题。

编辑:

  1. 使用perl和Net :: Jabber创建脚本。登录XMPP服务器的用户将是mediator@jabberserver.dom。每个人都可以向他发送消息。中介将以格式(来自:user1 MSG)将消息转发给支持人员。支持人员将回复mediator@jabberserver.dom并提供消息(回复:user1 REPLY)。调解员将REPLY转发给user1。
  2. 在此检查mod_shared_roster http://www.ejabberd.im/shared-roster-all(示例4)和此处http://www.process-one.net/docs/ejabberd/guide_en.html#htoc61
  3. 我认为除了页面中的javascript / strophe代码之外,第二种解决方案不需要额外的编码。