【问题标题】:Use node.js for event-based updates in Django?在 Django 中使用 node.js 进行基于事件的更新?
【发布时间】:2011-06-14 05:24:57
【问题描述】:

我不是在找人来编写答案,但我想知道是否有人可以概述一下如何将 Django 与 node.js 一起使用以获得即时的、事件驱动的更新。

我有一个“新闻提要”,我希望在新项目进入时更新该提要。我的一般想法是通过 javascript 打开与节点服务器的连接,让节点服务器“休眠”直到有新项目进入,此时它返回数据并且 Django 端开始另一个连接。

在实际编写 node.js 代码时,我感到困惑 - 文档显示了很多信息,但没有显示如何使用这些信息。如果有人可以指导我在哪里寻找这个,我将不胜感激 - 我是否使用EventEmitter之类的东西?如何让 Django 端脚本要求节点服务器仅侦听有关特定用户的事件?

提前致谢!

【问题讨论】:

    标签: django node.js


    【解决方案1】:

    如果您不喜欢编写 node.js 代码,您应该看看专门为支持长时间运行的 HTTP 请求而构建的基于 Python 的服务器。

    Tornado 就是其中之一,您可以在其中运行 Django(例如 http://lincolnloop.com/blog/2009/sep/15/using-django-inside-tornado-web-server/ )。它的 CPU/内存使用率可能不如 node.js,但绝对值得一看!

    【讨论】:

      【解决方案2】:

      没关系,我想我想通了。我创建了自己的发射器并让它监听我自己的事件。

      var myemitter = new events.EventEmitter();
      

      当来自 Django 的请求进来时,

      myemitter.addListener('action'+userid,function(data){
          //do something with data
      }
      

      该请求将通过 JavaScript 进行 $.ajax() 调用,该调用本质上是长时间轮询并等待事情发生。当服务器上发生某些事情时,即用户做了某事,服务器将发布到节点。该请求将导致事件被发出:

      myemitter.emit('action'+userid,data);
      

      ...这会导致调用第二个代码段的回调函数。然后它找到与该请求关联的响应对象,返回信息,并由 Django 端脚本进行解析。

      希望这对某人有所帮助,我想我只是发布我的答案。

      【讨论】:

        猜你喜欢
        • 2015-10-18
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 2011-09-05
        • 2019-07-04
        • 1970-01-01
        • 2016-09-21
        • 2011-03-11
        相关资源
        最近更新 更多