django+nginx+uwsgi+supervisor+daphne+docker deploying websocket

41 篇文章 0 订阅
14 篇文章 0 订阅

部署方式

  • OS Linux
  • func docker + docker-compose

websocket简介

功能:使用单个TCP连接实现双向通信
实现原理:通过浏览器发出websocket连线请求,然后服务器发出回应,浏览器很服务器只需要做一个握手的动作就可以实现数据的相互传送
好处:1、Header很小;2、服务器的推送,服务器不需要被动的返回数据,可以主动推送数据到浏览器

实现方式

使用nginx代理,uwsgi处理HTTP请求,daphne处理websocket请求,supervisor管理所有得到进程。
注: daphne中的默认端口是8000

配置文件简介

asgi.py

在setting.py的路径下添加asgi.py

import os
from channels.asgi import get_channel_layer
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "projects_name.settings")
channel_layer = get_channel_layer()

nginx.conf

server {
    .....
    location / {
        uwsgi_pass  projects_name;
        include    /etc/nginx/uwsgi_params; 
    }
    location /ws/ {
            proxy_pass http://127.0.0.1:8000/ws/;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

}

uwsgi.ini

[uwsgi]
chdir           = /usr/src/app 
module          = projects_name.wsgi
master          = true
processes       = 10
socket          = /tmp/projects_name.sock
chmod-socket    = 666
vacuum          = true
enable-threads  = true

supervisord.conf

[program:app-worker]
command =python /usr/src/app/manage.py runworker #其实这里感觉怪怪的,有时候查查是否有更好的解决方法
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

[program:app-websocket]
command = daphne -b 0.0.0.0 projects_name.asgi:channel_layer
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log

测试方式

wscat -c ws://IP+port/api

在此记录一下方法,如果您有更好的方式请在评论区分享一下,谢谢!

参考网站

http://masnun.rocks/2016/11/02/deploying-django-channels-using-daphne/
http://channels.readthedocs.io/en/latest/deploying.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值