gpt4 book ai didi

python - Django 中基于 XMPP 的实时聊天系统

转载 作者:太空狗 更新时间:2023-10-30 03:06:59 24 4
gpt4 key购买 nike

我需要在 Django 中实现一个基于 XMPP 的实时聊天系统。经过同事的大量鞭策和想法,我们想出了这个。


使用机器人的方法:

  • 当访问者访问网站时。访客的 XMPP 客户端(在本例中为 Strophe.JS)开始与 XMPP 服务器建立 XMPP-over-BOSH 连接,并连接到名为 <visitor_id>@conference.demo.com 的房间。 .目前房间里没有其他人。
  • 访问者使用自定义访问者 ID 向 Django 发出分析请求
  • Django View ,将访问者 ID 存储在名为 ActiveUsers 的表中.此表包含一个名为 status 的新字段.它设置了 statusINACTIVE .
  • 此模型在 save 上发送信号方法。
  • 这个信号被连接到 XMPP 服务器并加入房间的机器人接收到 <visitor_id>@conference.demo.com .现在房间里有了用户和机器人。
  • 站点支持人员登录到他们的网络界面。
  • 他们有 JS 代码,可以长时间轮询 Django 站点以检查 ActiveUsers .它从表中获取行并显示它。 (我考虑过为此使用 django-pubsub)
  • 当访客键入一条消息时,它会通过 XMPP-over-BOSH 到达 XMPP 服务器,房间中的 jabber 机器人会看到此消息并更新 ActiveUsers 中的记录状态。表到 ACTIVE .
  • 如前所述:站点支持人员使用 JS 不断轮询此表。它开始闪烁 ow 以表明用户正在聊天。
  • 支持人员现在可以双击开始与访客房间的 XMPP-over-BOSH 连接的行。它知道房间是<visitor_id>@conference.demo.com .
  • 机器人看到支持人员已加入房间,更新 ActiveUsers记录显示CHATTING .这确保房间内最多只能有支持人员,即房间有人。
  • 机器人将消息记录到 Django 表中
  • 当两者都看到两个用户都已离开房间时,它会删除记录。

ejabberd 或 openfire 将是 XMPP 服务器。Apache 是 Web 服务器,它运行 mod_wsgi 来为 Django 提供服务,并运行 mod_proxy 来将 XMPP-over-BOSh 请求代理到 XMPP 服务器。

这样做听起来不错吗?有什么建议么?我担心 Django 系统的负载。

(很长。对不起。)


使用状态节的方法:

在客户端,我正在使用支持存在的 Strophe JS 库,并且我已经添加了回调方法。我很灵活地使用 ejabberd 或 openfire 作为我的 XMPP 服务器。 XMPP 服务器上有很多访问者——一些来自站点 A,一些来自站点 B,但他们都连接到同一个 XMPP 服务器。当访问者访问该站点时,他们将连接到 XMPP 服务器 <visitor_id>_<site_id>@demo.com。每个人都登录到一个名为 <visitor_id>@conference.demo.com 的房间.销售/支持人员也连接到 XMPP 服务器 <supportsale_id>_<site_id>@demo.com .他们虽然没有连接到任何聊天室。他们的名册上没有任何访客。

显示用户已连接到站点的一个好方法是将状态节传递给销售/支持人员。只有来自同一站点的访问者和销售/支持人员相互通信,这就是为什么我有 <site_id>在用户名中显示该人属于哪个站点。

如果您的名册上没有用户,您似乎无法为该用户订阅状态节。 (非常合乎逻辑)。是否可以自动将连接到系统的站点的每个新用户添加到该站点的销售/支持人员名册中?这不会自动向销售/支持人员发出存在信号吗?我怎样才能实现这个——有什么帮助吗?

最佳答案

我就是这么写的。它叫做Seshat并在网站和 Jabber 服务器(我使用 ejabberd)之间使用“代理”机器人。它目前处于测试阶段,主要是因为它尚未在我公司之外进行过广泛测试。

注意:虽然 README 特别提到了 Pyramid 网络框架,但核心系统也可以与 Django、TurboGears 或命令行系统一起工作。只是我只打包了展示如何将它与 Pyramid 集成的示例代码。

Seshat 正在积极开发中。如果您有任何功能请求,请告诉我。 :-)

关于python - Django 中基于 XMPP 的实时聊天系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com