本文介绍: 与urls.py功能类似,当接受到客户发来的socket请求时,使用哪个类socket类进行处理。wsgi:django默认启动模式,wsgi只支持同步处理请求,即http请求。asgi:该模式下支持wsgi,并且新增了异步请求和webSocket。类似于视图views.py,创建用于socket处理的类。使用浏览器的console进行简单测试。修改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',
]
#添加该选项,表示django以asgi的模式启动
ASGI_APPLICATION = 'webSocket.asgi.application'
wsgi:django默认启动模式,wsgi只支持同步处理请求,即http请求
asgi:该模式下支持wsgi,并且新增了异步请求和webSocket
在指定目录下创建routings.py、consumers.py
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()
与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>w+)/$',ChatConsumer)
]
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)
})
#创建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进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。