为Django项目选择一个好的异步解决方案

时间:2013-01-20 20:27:12

标签: django node.js asynchronous websocket tornado

我目前正在使用Apache(mod_wsgi)上的Django来开发我的应用程序。我最喜欢的事情之一就是使用JavaScript的setInterval()函数和伪AJAX来“伪造”异步请求,以便从数据库中检索新数据。例如:

// javascript

function someFunction() {
    // do some stuff
    setInterval(function() { fetchNewStuff() }, 1000); // run fetchNewStuff() every second
}

function fetchNewStuff() {
    Dajaxice.main.fetch_new_stuff(fetch_new_stuff_callback, {'id':$(this).attr('user_id')});
}

function fetch_new_stuff_callback(data){
    // append new stuff to my table, list or whatever in HTML page
}

据我所知,这对我的需求来说非常好。但是,随着我的应用程序越来越大,越来越复杂,无论我多么努力减少传输数据,这对我的服务器和客户来说都会变得太麻烦。此外,我无法解决在今天的世界中我仍在“伪造”这个问题的事情:)所以,我想找到一些具有推送功能的“真正”解决方案,用于我当前和未来的项目。

我确实试图谷歌我的问题,我发现了许多有趣的东西(Tornado,Nginx,Node.js,Twisted等),但大多数教程/文章/博客至少有6个月的历史,我相信很多事情发生了变化。到目前为止,我已经尝试测试Tornado并且它是成功的测试,但是我在生产服务器上设置它时遇到了一些问题。我也尝试过Node.js这非常简单,因为我知道JavaScript非常好,但话又说回来,我不确定它是否是一个很好的解决方案。

我的问题是 - 根据这些条件,在我当前和未来的应用程序中实现什么是最好的(服务器,平台,框架等等):

  • 易于使用(例如,Node.js可以放在这里)
  • 尽可能消除第三方的内容(一些开箱即用的解决方案,例如Django + Websockets,它就是 [这真的只是一个愚蠢的例子]
  • 与Django一起使用的良好文档(在我的新技术和Django上有一些真实的例子,因为我对于web服务器和相关的东西非常n00b)。
  • 有一个良好的视角和未来(我真的希望学习一些我会经常使用的东西,而且我不需要经常重新配置)

感谢您的想法以及对此的任何帮助(非常欢迎链接到一些好的,最近更新的读数:)

1 个答案:

答案 0 :(得分:1)

你应该看看django-socketio项目,这是一个Django应用程序,它提供了通过Socket.IO使用带有Django的websockets所需的功能。

它使用gevent库和socket.io