我有几个我编写的 Android 和 iOS 本机移动应用程序,它们直接连接到我托管的 XMPP 服务器。他们通过 XMPP 推送和拉取实时数据。我还使用了一些XMPP XEP 扩展。对于其他操作,我在同一台服务器上运行了一个 django 应用程序,所有移动应用程序都通过 HTTP REST 接口使用它。我在 django 端使用 Celery 和 Redis 来异步执行一些操作(比如对我的数据库进行大量的批量写入)。
这一切都很好,花花公子。耶。
但是现在我想为所有这些编写一个 Web 前端,所以我开始研究我的选择,而且很好 - 有很多方法可以给猫剥皮,我想先咨询 SO 社区。
拥有一个 js 库,它为我提供了一个用于套接字通信的统一 API(即尝试不同的 Web 套接字实现或回退到 Flash)的想法吸引了我,因此我提到了 Socket IO。必须运行 nodejs 服务器的想法,好吧,不是那么多(还要学习一件事),但如果我必须这样做,我肯定会。我知道有些人使用gevent 作为节点服务器的替代品。其他人,决定编写一个小的 nodejs,将其连接到堆栈的其余部分。我可能会这样做。
另一种选择是使用像Strophe这样的 js XMPP 库,我认为它没有闪退。另外,我需要研究这对我的服务器意味着什么。
我已经阅读了几个关于如何做彗星和 django 的 Stackoverflow 答案——因此为什么看起来有几个选项。
问题是:
如果我想拥有 Socket IO 行为的优势(带有后备)并且我想将实时数据推送到 Web 客户端(通过 XMPP 馈送到服务器),并使用 Django,我最好的选择是什么?
更新:我使用的 XMPP 服务器是ejabberd,它也支持BOSH。我意识到我可以使用Strophe.js,因此我的通信将通过一种长轮询 http 连接而不是 websockets。据我所知,有一些XMPP over Websockets 开源库,但 AFAIK 社区不如 SocketIO 活跃。
更新 2:我需要支持的浏览器只是现代浏览器。我想这意味着 Flash 后备不会那么重要,这让我倾向于 strophe.js。