2012-06-07 29 views
23

我需要在django中構建一個推送系統,基本上它的功能是將消息從服​​務器推送到瀏覽器。如何在django中構建推送系統?

由於無法使用nodejs,我更喜歡websocket或軌道式,但我不知道如何在django中實現這兩個任何。請爲我推薦一種方法,這對我很有幫助,thx。

回答

11

Django並不善於將事情推給客戶。如果django是你唯一的選擇,模仿推送的唯一方法是通過長輪詢。但這不是有效的。相反,websockets很熱。龍捲風和扭曲可以幫助你在這裏。對於您的問題here也有更完整的答案。

+0

我的整個網站都是基於django和Nginx的,所以我想它不是一種有效的方式來使用Tornado或扭曲的權利? – Stan666

+0

爲什麼不高效?它取決於你的硬件嗎?用一點努力,你可以有一個平行的龍捲風過程,處理一些websocket .. – hymloth

+0

對不起,我不太熟悉龍捲風,你的意思是一個龍捲風服務器平行於Django?我的第一個想法是在django裏面做這個,因爲django-websocket不是太糟糕。 – Stan666

13

一個選擇是使用一個WebSocket服務器並行運行到具有REST/Push API的Django服務器,然後通過簡單的HTTP/POST將其從Django推送到WebSocket服務器,然後將這些消息傳遞給所有連接的WebSocket客戶端。

這樣,您不需要對現有Django應用程序進行任何結構/技術更改,但仍然具有可擴展的現代基於WebSocket的推送功能。

對於上面提供的託管服務,我會看看http://pusher.com

如果您更願意自己開發自己的產品,那麼我會看看http://autobahn.ws,它被部署爲可立即運行的虛擬設備(VMware,VirtualBox,Amazon EC2)。您可以在這裏找到REST/API的工作示例https://github.com/tavendo/AutobahnPushPython

聲明:我是Autobahn Open-source的作者,並且爲Tavendo提供Autobahn.ws(基於Autobahn OSS的商業產品)。

+0

我會嘗試一下AutobahnPushPython,thx :) – Stan666

6

有一個Django模塊,它支持的WebSockets出使用Redis的作爲消息隊列的方塊。 看看這裏:https://github.com/jrief/django-websocket-redis

聲明:我是該庫的作者。

+0

你能推薦一個最簡單的例子嗎? –

+0

@RubberDuck ...檢查存儲庫演示。這個很不錯。你可以檢查你的安裝:http://django-websocket-redis.readthedocs.org/en/latest/installation.html#check-your-installation這裏是現場演示:http://websocket.aws.awesto.com/chat/ – nicorellius