关于websocket
早期,很多网站为了实现推送技术,所用的技术都是 轮询(也叫短轮询)。轮询是指由浏览器每隔一段时间向服务器发出 HTTP 请求,然后服务器返回最新的数据给客户端。

这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而 HTTP 请求与响应可能会包含较长的头部,其中真正有效的数据可能只是很小的一部分,所以这样会消耗很多带宽资源。
所以在这种情况下,HTML5 定义了 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
Websocket 使用 ws 或 wss 的统一资源标志符(URI),其中 wss 表示使用了 TLS 的 Websocket。
ws_chat项目
https://www.cnblogs.com/xiao987334176/p/13625522.html
基于websocket的即时聊天项目

部署
我们之前的部署,django也好,flask也好,都是uwsgi一把梭,但是uwsgi只能部署传统的http协议

也就是说websocket不能使用uwsgi部署,而要使用ASGI部署
daphne -b 0.0.0.0 -p 9005 --proxy-headers django3_websocket.asgi:application
# daphne -b 运行的ip -p 端口 --proxy-headers 项目目录.asgi:application
linux后台运行命令
nohup daphne -b 127.0.0.1 -p 8002 --proxy-headers django3_websocket.asgi:application
nginx配置
server {
listen 80; # 监听端口
server_name ws.lzysite.com; # 域名
location / {
proxy_pass http://127.0.0.1:8002; # Daphne任务端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_read_timeout 3600s; # 长连接时间
}
location /static { # 静态文件转发路径
alias /www/wwwroot/django3_websocket/static;
}
}
由于没有找到 daphne 的重启命令,可能有,也可能没有,所以自己写了一个重启脚本
restart.sh
# 进入虚拟环境
source websocket_pro_venv/bin/activate
# 平滑重启nginx配置
nginx -s reload
service_name=django3_websocket
echo "---停止${service_name}服务---"
# 判断进程是否存在
function is_exit(){
#获取PID
PID=`ps -ef |grep ${service_name} |grep -v grep |awk '{print $2}'`
if [ -z "${PID}" ]
then
# 不存在进程
return 1
else
# 存在进程
return 0
fi
}
is_exit
if [ $? -eq "0" ]; then
# 有服务,先结束
kill -9 ${PID}
else
echo "---${service_name}服务未启动---"
fi
# 启动命令
echo "---${service_name}服务开始---"
# 启动asgi服务
# https://pypi.org/project/daphne/2.5.0/
nohup daphne -b 127.0.0.1 -p 8002 --proxy-headers $service_name.asgi:application
参考网站
https://blog.z0ukun.com/?p=3162
https://cloud.tencent.com/developer/article/1807566
https://www.qedev.com/linux/238134.html
https://www.cnblogs.com/xiangjianan/p/14727202.html
https://baijiahao.baidu.com/s?id=1713307876537918339&wfr=spider&for=pc