【发布时间】:2012-05-08 18:37:44
【问题描述】:
我编写了几个 Android 和 iOS 原生移动应用程序,它们直接连接到我托管的 XMPP 服务器。他们通过 XMPP 推送和拉取实时数据。我还使用了一些XMPP XEP extensions。对于其他操作,我在同一台服务器上运行了一个 django 应用程序,所有移动应用程序都通过 HTTP REST 接口使用它。我在 django 端使用 Celery 和 Redis 来异步执行一些操作(比如对我的数据库进行大量的批量写入)。
这一切都很好而且花花公子。耶。
但现在我想为所有这些编写一个 Web 前端,所以我开始研究我的选择,而且很好 - 有很多方法可以给猫剥皮,我想先咨询 SO 社区。
拥有一个 js 库的想法为我提供了用于套接字通信的统一 API(即尝试不同的 Web 套接字实现或回退到 Flash)对我很有吸引力,因此我提到了 Socket IO。必须运行 nodejs 服务器的想法,好吧,不是那么多(还要学习一件事),但如果我必须这样做,我肯定会。我知道有些人使用gevent as a replacement of the node server。其他人,决定写一个small nodejs which they connect to the rest of their stack。我可能会这样做。
另一种选择是使用像 Strophe 这样的 js XMPP 库,我认为它没有 Flash 回退。另外,我需要研究这对我的服务器意味着什么。
我已经阅读了一些 Stackoverflow 上关于如何做 comet 和 django 的答案 - 因此似乎有几个选项。
问题是:
如果我想获得 Socket IO 行为的优势(带有回退功能),并且我想将实时数据推送到 Web 客户端(通过 XMPP 馈送到服务器),并使用 Django 什么是我的最佳选择?
更新:我使用的XMPP服务器是ejabberd,也支持BOSH。我意识到我可以使用Strophe.js,因此我的通信将通过一种长轮询http连接而不是websockets。据我所知,有一些 XMPP over Websockets open source library,但 AFAIK 社区不如 SocketIO 活跃。
更新 2: 我需要支持的浏览器只是现代浏览器。我想这意味着 Flash 后备不会那么重要,这让我倾向于 strophe.js。
【问题讨论】:
-
除了js之外还有其他语言的socket.io服务器实现。节点只是参考服务器。我有一个使用 Go 编写的 go-socket.io 的 socket.io 服务器。 Python 有 TornadIO2,它在其堆栈中使用 tornado。
标签: django xmpp socket.io comet strophe