2012-10-21 52 views
0

我正在创建一个web应用程序,它需要不断调查我的django web服务器以获取更新。有没有办法避免这种投票?就像服务器可以在更新时发送推送消息一样,或者客户端为事件注册回调,并且服务器在发生更改时触发回调。如何避免轮询django/python web服务器?

我知道在ASP.net等信号框架,但我想要的东西,可以与Django一起工作。

感谢

+0

我*认为*你需要的是: https://github.com/pusher/pusher_client_python 但我从来没有这样做过,因此对于将此作为答案并不十分自信。如果这能解决你的问题,请让我知道 - 我可能需要在不久的将来实现类似的东西! –

回答

1

从根本上web sockets,HTML5的一部分,被设计用于此目的,即通过HTTP协议客户端和服务器之间的双向通信,而其被高度谈过几个应用服务器已经实现了,甚至更少http服务器甚至开始支持它。

虽然有一些软件包:

  • django-websocket
  • django-socketio
  • ,在Django中已经启用,他们没有做任何事情你的HTTP服务器,非常很少,如果你使用Django独立,这是因为django对于分发静态内容(如图像或任何其他静态文件)效率不高,并且分发工作负载,因此我们依赖于nginx,apache等等。不幸的是,它们不支持Web套接字,但是,因为它们倾向于破坏客户端和应用服务器之间的通信,即使它首先发起,这取决于实现。

    从我个人的经验来看,nginx会在60秒后中断通信,因为这是默认分配的任何时间。

    据我所知node.js也许是最好的服务器,目前,与网络套接字工作。

    取决于你想要实现什么,如果常规轮询看起来效率很高,你可以尝试长轮询,基本上连接是开放的,直到新数据被推回到客户端与常规轮询,这是请注意,您可能必须配置您的http服务器不要终止专业开放连接并运行django multithreaded,因为每个连接都将使用一个实例。