我需要在django中構建一個推送系統,基本上它的功能是將消息從服務器推送到瀏覽器。如何在django中構建推送系統?
由於無法使用nodejs,我更喜歡websocket或軌道式,但我不知道如何在django中實現這兩個任何。請爲我推薦一種方法,這對我很有幫助,thx。
我需要在django中構建一個推送系統,基本上它的功能是將消息從服務器推送到瀏覽器。如何在django中構建推送系統?
由於無法使用nodejs,我更喜歡websocket或軌道式,但我不知道如何在django中實現這兩個任何。請爲我推薦一種方法,這對我很有幫助,thx。
Django並不善於將事情推給客戶。如果django是你唯一的選擇,模仿推送的唯一方法是通過長輪詢。但這不是有效的。相反,websockets很熱。龍捲風和扭曲可以幫助你在這裏。對於您的問題here也有更完整的答案。
一個選擇是使用一個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的商業產品)。
我會嘗試一下AutobahnPushPython,thx :) – Stan666
正如@hymloth建議的,更好的方法是使用龍捲風或node.js。
但是,如果你不得不使用Django,我寫了一篇關於用它實現WebSocket的文章,你可能會覺得有用。
http://curella.org/blog/2012/jul/17/django-push-using-server-sent-events-and-websocket/
有一個Django模塊,它支持的WebSockets出使用Redis的作爲消息隊列的方塊。 看看這裏:https://github.com/jrief/django-websocket-redis
聲明:我是該庫的作者。
你能推薦一個最簡單的例子嗎? –
@RubberDuck ...檢查存儲庫演示。這個很不錯。你可以檢查你的安裝:http://django-websocket-redis.readthedocs.org/en/latest/installation.html#check-your-installation這裏是現場演示:http://websocket.aws.awesto.com/chat/ – nicorellius
在Django的WebSockets的另一種實現: https://github.com/jonashagstedt/swampdragon
從文檔:SwampDragon利用Django的精彩ORM,龍捲風優秀的WebSocket支持(回退在IE7測試。),和Redis的驚人的速度的。
用途龍捲風內部,並有蟒蛇3支持。
截至2016年,有Django Channels,帶來了Django的websockets(1.8和更高)。
還發現了一個Django + Channels + React的完整教程:https://codyparker.com/django-channels-with-react/ – np8
我的整個網站都是基於django和Nginx的,所以我想它不是一種有效的方式來使用Tornado或扭曲的權利? – Stan666
爲什麼不高效?它取決於你的硬件嗎?用一點努力,你可以有一個平行的龍捲風過程,處理一些websocket .. – hymloth
對不起,我不太熟悉龍捲風,你的意思是一個龍捲風服務器平行於Django?我的第一個想法是在django裏面做這個,因爲django-websocket不是太糟糕。 – Stan666