我需要在 Django 中实现一个基于 XMPP 的实时聊天系统。经过同事的大量鞭策和想法,我们想出了这个。
使用机器人的方法:
<visitor_id>@conference.demo.com
的房间。目前房间里没有其他人。 ActiveUsers
的表中。该表包含一个名为 status
的新字段。它将 status
设置为 INACTIVE
。 save
方法上发送信号。 <visitor_id>@conference.demo.com
的机器人接收。现在我们在房间里有用户和机器人。 ActiveUsers
。它从表中获取行并显示它。 (我想过为此使用 django-pubsub) ActiveUsers
表中的记录状态更新为 ACTIVE
。 <visitor_id>@conference.demo.com
。 ActiveUsers
记录以显示 CHATTING
。这确保了房间内只能有支持人员,即房间被占用。 ejabberd 或 openfire 将是 XMPP 服务器。
Apache 是 Web 服务器,它运行 mod_wsgi 来为 Django 提供服务,而 mod_proxy 则将 XMPP-over-BOSh 请求代理到 XMPP 服务器。
这样做听起来不错吗?有什么建议么?我担心 Django 系统的负载。
(很长。对不起。)
使用存在节的方法:
在客户端,我正在使用支持在线状态的 Strophe JS 库,并且我添加了回调方法。我可以灵活地使用 ejabberd 或 openfire 作为我的 XMPP 服务器。 XMPP 服务器上有很多访问者——一些来自站点 A,一些来自站点 B,但他们都连接到同一个 XMPP 服务器。当访问者访问该站点时,他们以
<visitor_id>_<site_id>@demo.com
的身份连接到 XMPP 服务器,并且每个人都登录到一个名为 <visitor_id>@conference.demo.com
的房间。销售/支持人员也作为 <supportsale_id>_<site_id>@demo.com
连接到 XMPP 服务器。他们没有连接到任何聊天室。他们的名单上没有任何访客。显示用户已连接到该站点的一个好方法是向销售/支持人员传递一个存在节。只有来自同一站点的访问者和销售/支持人员才能相互通信,这就是为什么我在用户名中包含
<site_id>
以显示该人属于哪个站点。如果您的花名册上没有他,您似乎无法为用户订阅出席信息节。 (很合逻辑)。是否可以将连接到系统的站点的每个新用户自动添加到该站点的销售/支持人员名册中?这不会自动向销售/支持人员发出信号吗?我该如何实现这一点 - 有什么帮助吗?
最佳答案
我正是这样写的。它称为 Seshat 并在网站和 Jabber 服务器(我使用 ejabberd)之间使用“代理”机器人。它现在处于测试阶段,主要是因为它还没有在我公司之外进行过广泛的测试。
注意:虽然自述文件特别提到了 Pyramid 网络框架,但核心系统也可以与 Django、TurboGears 或命令行系统一起工作。只是我只打包了示例代码,展示了如何将其与 Pyramid 集成。
Seshat 正在积极开发中。如果您有任何功能要求,请告诉我。 :-)
关于python - Django 中基于 XMPP 的实时聊天系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6584015/