nginx + uwsgi + flask-sse 配置問題

由於項目需要從服務器發給客戶端一個消息,藉此來提醒客戶端。所以需要可以主動從服務器發送消息給客戶端,所以傳統的http就不行了。查看了資料以後發現有一些辦法可以實現,比如websocket,sse。 websocket 是雙向通信,而sse只是單向的。所以最終選擇了使用sse,考慮到簡潔和資源利用的原因。

 

在實際使用的時候遇到了一些問題,由於是新手。在嘗試搞明白nginx uwsgi flask 這3者如何一起工作的過程中發現,最麻煩的就是當自己不理解的時候,不知道這些配置有什麼用,所以來來回回幾百次,不停的啓動,修改,停止,然後再修改... 花了很長時間。

 

由於使用了上述技術棧,所以所有的請求首先會給nginx,可以在nginx中添加各樣的過濾,路由規則,還可以做load balance,確實是一個強大的工具。在nginx裏面可以配置將請求轉發給uwsgi來處理(稍後會有講具體配置和流程的文章)。在客戶端嘗試用sse連接的時候,404,504,502 都頻繁出現,當我配置了一個單獨的 location /sse{} 的時候,不會出現404,但是會頻繁504,嘗試從上游服務器獲取響應超時。查過很多資料,發現有一個大佬寫了一個nginx的插件,由於沒有時間試,所以暫時記錄在此。

 

插件: https://github.com/wandenberg/nginx-push-stream-module

使用這個插件的問題,需要注意裏面介紹的nginx版本,在嘗試使用時我就遇到了這個問題,由於我的服務器默認用nginx1.6版本,而上述插件版本有點老與我的不兼容(有待考證,到底是版本不兼容,還是沒有編譯的原因)。

根據 nginx 官方 https://www.nginx.com/resources/wiki/modules/push_stream/ 介紹:

使用這個push-stream-module 需要在編譯nginx的過程中加入這個module,才能在實際的配置中使用。

有時間需要試試這個,看看效果如何,會不會比轉發sse給uwsgi來處理快一些!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章