nginx,uwsgi,supervisor,channels,daphne部署django项目

最近做了一个项目,需要后端主动与前端进行通信,官方推荐使用的是channels(channels官方文档). 把我的使用经历以及部署过程,记录一下,这篇文章主要记录使用 uwsgi, nginx, supervisor,daphne部署过程,有时间的会把我用docker 部署的经历也写一下.

安装channels,使用websocket
  1. 下载channels pip install channels
  2. 项目中配置channels ,在settings文件的INSTALLED_APPS加入channels
    在这里插入图片描述
  3. 在项目中新建routing.py文件,用来生成websocket的路由,这里我的文件和官方的不太一样,但是最终的效果是一样的,就像我们平时写urls.py的路由一样,一个在应用目录下,一个在项目下.我把routing.py建在应用目录下.
    (1) 这是我的项目的目录结构,以及我的routing.py文件的位置
    在这里插入图片描述
    (2) 这是routing.py文件的内容,具体写什么,先空着,一步一步来完善
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from struction.consumers import SendConsumer

application = ProtocolTypeRouter({
   
    # WebSocket chat handler
    "websocket": AuthMiddlewareStack(
        URLRouter([
        
        ])
    ),
})

(3) routing.py文件创建完成之后,在settings.py进行配置

#websocket
ASGI_APPLICATION = "struction.routing.application"  # 上面新建的 asgi 应用
  1. 然后在struction应用下新建一个consumers.py文件用来写websocket通信的业务逻辑
    官方文档中的案例是做一个聊天室,我实际的项目需求只需要给前端发消息,不需要做到官方文档中那样,所以在websocket的通信这部分做了修改.
import json
import time

from channels.generic.websocket import WebsocketConsumer


class SendConsumer(WebsocketConsumer):

    def connect(self):
        self.accept()

  #     # 断开连接
    def disconnect(self, close_code):
      # Leave room group
        pass

  #     # 接受消息
    def receive(self, text_data=None, bytes_data=None):
    	# 和前端通信接收前端的消息
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        print(text_data_json, 'websocket-----------')

        # 这个代码测试用,给前端发消息,我这里的是测试的demo,前端给我发什么,我回什么
        self.send(text_data=json.dumps({
   
            # 'message': json.dumps(msg)
            'time': time.time(),
            'message': message
        }))
  1. 完成之后,在routing.py配置路由
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from struction.consumers import SendConsumer

application = ProtocolTypeRouter({
   
    # WebSocket chat handler
    "websocket": AuthMiddlewareStack(
        URLRouter([
         	# 这个就是前端与websocket通信时访问的路由
            path("ws/channel/websocket/"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值