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对象进行消息收发和处理。