1.Websocket 簡介
WebSocket協議是基於TCP的一種新的網絡協議。它實現了瀏覽器與服務器全雙工(full-duplex)通信——允許服務器主動發送信息給客戶端。
2.Nginx 簡介
Nginx是一個反向代理服務器,所有的來自瀏覽器的請求必須經過Nginx。
通常的正向代理服務器,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中,此時客戶機是主動方。
而在反向代理中,web服務器是主動方,客戶機必須經過代理才能訪問。
3.Uwsgi 簡介
所謂后端APP,即一套用來處理客戶端請求的邏輯部分的程序;
所謂WSGI,即python用來web開發的協議標准;
所謂uWSGI,即一個即可以充當web服務器,又可以作為中間件的程序;
所謂uwsgi,是uWSGI基於WSGI實現的自用的一個協議;
4.配置Nginx代理Websocket連接
一 Nginx監聽80端口,並轉發到443端口。即默認使用https傳輸。
二 在443端口,開啟ssl,設置證書。
如果監聽到指定websocket連接,設置websocket協議升級,具體配置如下:
proxy_connect_timeout 2s
...
proxy_pass https://clusters
...
proxy_set_header X-Real_IP $remote_addr_IP
proxy_set_header Host $host
proxy_set_header X_Forward_For $X_Forward_For
proxy_http_version 1.1
proxy_set_header Upgrade $http_upgrade
proxy_set_header Connection 'upgrade'
三 監聽另一端口,配置同上,並將消息轉發給uwsgi端口,交付給uwsgi處理。
5.前后端發送和處理Websocket消息
前端使用javascript接口新建websocket對象,並監聽websocket.onmessage事件,進行消息接受和處理。並通過websocket.send()接口進行消息發送。
后端uswgi框架使用類似的websocket對象進行消息收發和處理。