1.安装组件channels
pip install channels
2.注册app
python
INSTALLED_APPS = [
'daphne', #channels4.0以后要引入
'channels', # 即时通信
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01.apps.App01Config',
]
3.在setting中添加ASGI------APPLICATION
WSGI_APPLICATION = 'MyBlog.wsgi.application'
ASGI_APPLICATION = 'MyBlog.wsgi.application'
4.在app01中创建consumers.py文件
pyhton
from channels.exceptions import StopConsumer
from channels.generic.websocket import WebsocketConsumer
class ChatConsumer(WebsocketConsumer):
def websocket_connect(self, message):
# 有客户端向后端发送websocket请求时自动触发
# 服务端允许和客户端创建链接
self.accept()
def websocket_receive(self, message):
# 浏览器基于websocket向后端发送数据,自动触发接受xi消息
print(message)
self.send("不要回复!")
def websocket_disconnect(self, message):
# 客户端与服务端断开连接时自动触发
print("断开连接!")
raise StopConsumer()
5.在setting.py同级目录中创建routing.py文件
python
from django.urls import re_path
from app01 import consumers
websocket_urlpatterns = [
re_path(r'ws/(?P<group>\w+)/$', consumers.ChatConsumer.as_asgi()),
]
6.修改asgi.py文件
python
import os
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from MyBlog import routing
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'MyBlog.settings')
application = ProtocolTypeRouter({
"http": get_asgi_application(), # 找urls.py 找视图函数
"websocket": URLRouter(routing.websocket_urlpatterns) # 找routing(urls) consumers(views)
})