2017-01-09 21 views
5

我想在Django框架中實現服務器發送事件(SSE)。很明顯,我認爲我可以實現一個view這樣的:使用Django服務器發送事件與數據庫後保存

@csrf_exempt 
def event_stream(request): 
    def eventStream(): 
     yield "data:Server Sent Data\n\n" 

    response = HttpResponse(eventStream(), content_type="text/event-stream") 
    response['Cache-Control'] = 'no-cache' 
    return response 

但我想觸發SSE調用每當一個新的條目在數據庫表中進行,從表中的post_save,我怎麼可能能夠實現這一點,因爲eventStream這裏是一個發電機功能。

回答

7

Django是圍繞打造請求/響應週期,這意味着它不使用WebSockets,甚至SSE很好地工作。在您的示例中,除非您在視圖中使用訂閱隊列(rabbitmq,redis pubsub)並在信號處理程序中發送數據,否則無法將post_save信號傳播到視圖。

考慮其他的解決方案,從服務器推:

  • 長輪詢
  • Django channels
  • 喜歡的NodeJS的asynchronus溶液或龍捲風代替或旁邊的Django
+0

在所有的,Django的渠道最巧妙的。 – Shubham

相關問題