配置Django

pip install channels daphne

注册app

修改settings.py

INSTALLED_APPS = [
    'daphne',   #注册daphne组件,在channels4.0开始,注册组件使用daphne,一定放在开头
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

#添加选项表示djangoasgi模式启动
ASGI_APPLICATION = 'webSocket.asgi.application'

 wsgidjango默认启动模式wsgi支持同步处理请求,即http请求

asgi:该模式下支持wsgi,并且新增异步请求和webSocket

指定目录下创建routings.pyconsumers.py

consumers.py

类似于视图views.py,创建用于socket处理的类

from channels.exceptions import StopConsumer
from channels.generic.websocket import WebsocketConsumer


class ChatConsumer(WebsocketConsumer):
    def websocket_connect(self, message):
        '''
        当有客户端后端发送websocket连接请求时,自动触发函数
        :param message:
        :return:
        '''
        # 服务器允许客户端创建连接
        self.accept()


    def websocket_receive(self, message):
        '''
        浏览器基于websocket向后端发送数据,自动触发接受消息,并且处理信息
        :param message:
        :return:
        '''
        # 输出消息
        print(message)
        #服务端前端消息
        self.send('服务器收到了你的消息:%s' % (message['text']))

    def websocket_disconnect(self, message):
        '''
        客户端服务端断开连接时,自动触发函数
        :param message:
        :return:
        '''
        print('断开连接')
        raise StopConsumer()

 routings.py

urls.py功能类似,当接受到客户发来的socket请求时,使用哪个类socket类进行处理

from django.urls import  re_path, path
from app.consumers import ChatConsumer
websocket_urlpatterns = [
    path('room/',ChatConsumer)
    #也可以使用正则路径,这种方式用在群组通信当中
    re_path('ws/chat/(?P<group&gt;w+)/$',ChatConsumer)
]

修改asgi.py

import os
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from . import routings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'webSocket.settings')

# 支持http请求和websocket请求
application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": URLRouter(routing.websocket_urlpatterns)
})

使用浏览器的console进行简单测试

#创建websocket
var socket = new WebSocket('ws://127.0.0.1:8000/room/')
#定义收到服务器消息之后如何处理
socket.onmessage = function(e){console.log(e.data)}
#向服务器发送消息
socket.send('你好')

原文地址:https://blog.csdn.net/system_post/article/details/127683347

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46086.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注