2013-03-13 98 views
2

我們目前有一個django應用程序通過Apache爲我們的前端網站提供服務。 前端查詢我們的後端,這是一個單獨的Python應用程序(Flask)服務於不同的服務器。 到目前爲止,前端已被要求查詢數據的後端,而不是其他方式。後端前端雙向通信

我們現在介紹用戶可以選擇接收有關係統中數據更改的數據警報。 檢查是否發生警報的過程必須發生在後端,因爲它與數據模型緊密結合。 因此,前端發送一個請求,在後端添加一個警報,然後輪詢並檢查觸發器是否發生。

問題是,一旦警報在後端觸發,前端需要得到通知,以便用戶可以通知。 後端無法直接提醒用戶,因爲它不知道用戶數據(如電子郵件等)(此用戶數據可能會更改,因此將它發送到後端以及添加警報的請求太簡單)。

因此,我們正在尋找將警報通知從後端推送到前端的最佳方式。 我們最好的做法是什麼?我們可以設置後端可以查詢的django應用程序的視圖,但我不喜歡前端查詢後端的想法以及其他方式。實現這個目標我們最好的選擇是什麼?

回答

3

有關一些可用方法的概述:What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?

由於您需要能夠在不需要客戶端持續輪詢的情況下將更新傳達到前端,這聽起來像您需要設置Web套接字或服務器發送的事件,並且對於遺留系統長輪詢或其他方法(可能如果需要縮放這些東西,請嘗試使用像pusher.io這樣的服務)。有許多關於整合這些物品放入燒瓶或Django的設置極大的教程。這裏有一些偉大的教程:http://blog.jupo.org/2011/08/13/real-time-web-apps-with-django-and-websockets/http://dev.hasenj.org/post/38188152502

爲了獲得最小的解決方案並運行,我建議給socket.io一看(http://socket.io/),然後使用python庫(Socket.IO Client Library in Python)。

如果需要認證,當用戶登錄,具有前端發送一個新的WebSockets頻道名稱的請求,然後保持該通道打開,直到他們退出或者他們的cookie到期。使用此頻道發送用戶更新。