在Django中使用node.js进行基于事件的更新?

时间:2011-01-23 23:49:40

标签: django node.js

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

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

当涉及到实际编写node.js代码时,我的困惑就来了 - 文档显示了很多信息,但没有显示如何使用该信息。我很感激,如果有人可以指导我去寻找这个 - 我会使用像EventEmitter这样的东西吗?如何让Django端脚本请求节点服务器只监听有关特定用户的事件?

提前致谢!

2 个答案:

答案 0 :(得分:7)

没关系,我想我弄明白了。我创建了自己的发射器并让它听取我自己的事件。

var myemitter = new events.EventEmitter();

当来自Django的请求进来时,

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

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

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

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

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

答案 1 :(得分:2)

如果您对编写node.js代码感到不舒服,那么您应该看一下专门为支持长时间运行的HTTP请求而构建的基于Python的服务器。

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