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

django带websocket项目部署

发布时间:2023-10-12 (2023-10-12)

关于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