django websocket channels 使用

学习网址:https://channels.readthedocs.io/en/latest/introduction.html

1、安装 channels

pip install channels

pip install channels_redis

2、setting同级创建  asgi.py

  

import os

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import chat.routing

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")

application = ProtocolTypeRouter({
  "http": get_asgi_application(),
  "websocket": AuthMiddlewareStack(
        URLRouter(
            chat.routing.websocket_urlpatterns  #  子应用路由
        )
    ),
})

3、子应用创建 routing

from django.urls import re_path

from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer.as_asgi()),
]

 

4、settings 注册 

INSTALLED_APPS = [....,channels,]
# channels_redis 
ASGI_APPLICATION = 'mysite.asgi.application'
CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels_redis.core.RedisChannelLayer',
        'CONFIG': {
            "hosts": [('127.0.0.1', 6379)],
        },
    },
}
# channels
ASGI_APPLICATION = 'mysite.asgi.application'
5、 子应用创建  consumers.py 文件
import json
from channels.generic.websocket import WebsocketConsumer

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, close_code):
        pass

    def receive(self, text_data):  #  回复
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        self.send(text_data=json.dumps({
            'message': message
        }))

6、前端js语法

const  chatwebsocket = new WebSocket("ws://127.0.0.1:8000")
chatwebsocket.onmessage = function(e){
// 后端返回前端消息 执行
}
chatwebsocket.onopen = function(e){
// 连接 时执行
chatwebsocket.send(JSON.stringify({'内容'}))
} 
chatwebsocket.onerror = function(e){
//  连接 错误时执行
}
chatwebsocket.onclose = function(e){
//连接关闭时执行
}

 

consumers
posted @ 2021-02-01 17:44  飘渺云烟  阅读(125)  评论(0编辑  收藏  举报