0

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

我知道 ASP.net 等中有信号框架,但我想要一些可以与 Django 一起使用的东西。

谢谢

4

1 回答 1

1

从根本上说,作为 HTML5 的一部分的Web 套接字就是为此目的而设计的,即客户端和服务器之间通过 http 协议进行双向通信,而备受关注的很少有应用程序服务器已经实现,甚至更少的 http 服务器实际上甚至开始支持它.

虽然有一些包:

  • django-websocket
  • django-socketio
  • 已经在 django 中启用了它,它们不会对您的 http 服务器做任何事情,如果您单独使用 django 很少,这是因为 django 对于分发静态内容(如图像或任何其他静态文件)效率不高,除了分配工作负载外,我们还依赖 nginx、apache 之类的东西。不幸的是,它们不支持 Web 套接字,因此它们往往会破坏客户端和应用程序服务器之间的通信,即使它是首先启动的,具体取决于实现。

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

    据我所知,node.js 可能是目前使用 Web 套接字的最佳服务器。

    根据您要实现的目标,如果定期轮询似乎有效,您可以尝试长轮询,基本上连接保持打开状态,直到将新数据推送回客户端与定期轮询相比,定期轮询是在某个时间间隔完成的,请注意,您可能必须配置您的 http 服务器以不终止长期打开的连接并运行 django 多线程,因为每个连接都将使用一个实例。

    于 2012-10-21T21:55:34.933 回答