使用Socket IO(或Strophe.js)、XMPP和Django的实时服务器推送

使用Socket IO(或Strophe.js)、XMPP和Django的实时服务器推送,django,xmpp,socket.io,comet,strophe,Django,Xmpp,Socket.io,Comet,Strophe,我编写了两个Android和iOS本机移动应用程序,它们直接连接到我托管的XMPP服务器。他们通过XMPP推拉实时数据。我还使用了一些。对于其他操作,我有一个django应用程序运行在同一台服务器上,所有移动应用程序都通过HTTP REST接口使用该服务器。我在django端使用芹菜和Redis异步执行一些操作(比如对我的数据库执行大量批处理写入) 这些都很好用。耶 但是现在我想为所有这些写一个网络前端,所以我开始研究我的选择,好吧,有很多方法可以剥猫皮,我想先和so社区核实一下 有一个js库为

我编写了两个Android和iOS本机移动应用程序,它们直接连接到我托管的XMPP服务器。他们通过XMPP推拉实时数据。我还使用了一些。对于其他操作,我有一个django应用程序运行在同一台服务器上,所有移动应用程序都通过HTTP REST接口使用该服务器。我在django端使用芹菜和Redis异步执行一些操作(比如对我的数据库执行大量批处理写入)

这些都很好用。耶

但是现在我想为所有这些写一个网络前端,所以我开始研究我的选择,好吧,有很多方法可以剥猫皮,我想先和so社区核实一下

有一个js库为套接字通信提供了一个统一的API(即尝试web套接字的不同实现或退回到flash)的想法吸引了我,因此我提到了socket IO。必须运行nodejs服务器的想法,嗯,没有那么多(还有一件事需要学习),但如果我必须这样做,我肯定会这样做。我知道有些人用。其他人,决定写一篇文章。我可能会这样做

另一个选择是使用js XMPP库,我认为它没有闪存回退功能。此外,我还需要研究这对我的服务器意味着什么

我已经阅读了一些关于如何做comet和django的Stackoverflow答案——因此,似乎有几种选择

问题是:

如果我想利用Socket IO行为的优势(具有回退功能),并且想将实时数据推送到web客户端(通过XMPP提供给服务器),并使用Django,那么我的最佳选择是什么?

更新:我使用的XMPP服务器是,它也支持。我意识到我可以使用,因此我的通信将通过一种长轮询http连接而不是WebSocket。据我所知,有一些,但很抱歉,社区没有SocketIO社区活跃


更新2:我需要支持的浏览器只是现代浏览器。我想这意味着Flash回退不会那么重要,这让我倾向于strophe.js。

不知道如果你要做BOSH(,),为什么需要Flash回退,strophe.js就是这么做的。如果不需要支持IE7,可以从strophe.js开始,甚至不需要相同来源的代理。IE6之所以能工作是因为它不安全,而IE8+只支持勉强工作的CORS形式

要通过XMPP从django向您的客户机获取信息,请使用您的收藏夹(例如从django应用程序)与服务器建立组件连接()。为提高性能,将该连接安排为相对较长的寿命(即不要为每个客户端连接创建新的连接)。根据需要发送协议


您没有提到您正在使用的XMPP服务器。不支持BOSH的XMPP服务器越来越少了,但如果您有一个,您可能需要作为BOSH到XMPP的代理,或者您可能想切换到更新的服务器,例如。

我认为一旦您被某个节点弄脏了手,您会发现从节点到socket.io将变得更加困难。node ready to go中有非常易于使用的xmpp模块(请参阅)。记住,node都是javascript,所以您可能已经熟悉了其中的编程

就我个人而言,我在使用节点0.6或更高版本时遇到了一些内存泄漏问题。节点0.4没有出现这些问题。如果您是github新手(就像我在玩Node之前一样),下面是如何使用Node服务器的

获取节点

  • 登录到您的linux框和最喜爱的目录(我假定为/)
  • git克隆
  • cd/节点
  • git标记-l(这将列出节点的所有可用版本)
  • git checkout v0.6.16(这将签出节点的0.6.16版本,例如,如果您有内存问题,您可以将其替换为v0.4.12)
  • /配置
  • 制造
  • 安装
  • 您需要某些开发工具来构建它,比如g++,但此时您将有一个工作的
    节点
    命令

    安装像xmpp这样的节点模块

    Node有大量的模块,其中大部分内容都已经为您编写好了。有一个搜索工具,您可以使用
    npm
    命令直接从shell访问所有模块。NPM是用于安装和管理节点模块的节点工具。例如,您可以键入
    npmsearchxmpp
    来搜索所有xmpp模块。要为节点安装基本的xmpp库,您需要执行
    npm install node xmpp
    。顺便说一下,大多数github节点模块页面都会在首页自述文件中包含说明

    保持节点在生产中运行

    当我第一次出发的时候,这让我很震惊。如果您有任何未捕获的错误,则节点将简单地死亡。所以,你可以 1.确保没有任何错误,或者它们都被捕获(不太可能,因为即使节点本身也会出错) 2.使用uncaughtException处理程序捕获这些问题。您会在程序中使用这样的代码

    process.addListener("uncaughtException", function (err) {
        util.log("Uncaught exception: " + err);
        console.log(err.stack);
        console.log(typeof(this));
        // maybe email me?
    
    });
    
    格外安全,永远使用

    即使存在未捕获的异常问题,生产中的程序也可能会死亡。内存不足,故障,谁知道呢。这就是使用像奇妙的节点模块“永远”这样的东西的好处(请参阅)。您可以键入
    npm永远安装-g
    永远安装。请注意-g选项,它将永远放在全局节点模块目录中。如果没有-g,它会将节点模块放在当前工作目录中。然后,您可以键入类似这样的内容(假设您的节点程序名为my_program.js)
    永久启动my_program.js
    ,然后永久程序将确保如果死亡,它将重新启动。

    我们使用的是实时