2014-11-14 126 views
9

我現在正在用django創建一個網站,並且我想實施一個像facebook或SE上的實時通知功能。在django的實時通知/聊天

我做了一些研究,似乎雖然有兩個選擇:ajax長輪詢和websockets,後者是要走的路。

然而,正如你所知道的去websocket'socket.io'插件結果是一個node.js插件和django端口似乎只支持python 2,該項目似乎已經死了。我正在使用python 2.7作爲我的項目解釋器,但我希望將來能夠證明自己,以便稍後升級到python3時,我不會發現自己無法使用此功能。

所以我的問題是這樣的: 是否有一個直接和未來的現成的方式來實現websocket將用於發送實時通知和聊天在Django環境?

回答

12

Django本身是以阻塞的方式構建的,即用同步的方法。所以,你不能與Django應用程序打開持久websocket,因爲它會阻止整個django線程。

如果你想在django項目環境中啓用通知/聊天,我建議使用centrifuge。它是用python編寫的,但使用異步(非阻塞)框架:tornado

但是,你甚至不需要知道它是如何工作的,因爲它提供了簡單的REST API來與它進行通信。

簡化工作流程,檢查docs瞭解更多詳情:

  1. 開始centrifuge在同一臺服務器,爲你的Django項目(或其他,但他們之間的低延遲)
  2. 您的前端將打開的WebSocket與離心機,而不是Django項目。
  3. 當您需要發送通知時,請通過REST API將它通過django發送到離心機,然後離心機將它送到需要的客戶端!

我已經試過它,它的工作原理!

+1

這似乎是一個可行的解決方案。非常感謝:) – Dan 2014-11-14 12:56:20

+0

@stalk:這聽起來非常有前途,謝謝!你知道它是否與像Heroku這樣的PaaS託管平臺兼容? – 2014-11-17 14:30:49

+1

@DavidW。沒有嘗試,但根據[文檔](https://centrifuge.readthedocs.org/en/latest/content/deploy.html#heroku)它可以運行離心機上heroku – stalk 2014-11-17 14:33:48

0

Django不提供您正在尋找的開箱即用功能。你必須使用第三方庫。一個跨框架工作的是Pusher

0

我認爲你必須去Firebase它給你很棒的同步和任何你將在前端使用聊天的方式,所以它不必對django環境做任何事情,因此你可以用firbase在回調中更新後端異步。此外,與AngularJS的firebase提供了真正真棒的三路綁定。