2012-10-21 47 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,因爲每個連接都將使用一個實例。