En aplicaciones prácticas, no todos los marcos de back-end son compatibles con el protocolo websocket de forma predeterminada. Si desea usarlo, es posible que deba usar diferentes módulos de terceros.
"""
后端框架
django
默认不支持websocket
第三方模块:channels
flask
默认不支持websocket
第三方模块:geventwebsocket
tornado
默认支持websocket
"""
¿Cómo soporta django websocket?
# 下载channels模块需要注意的点
# 1.版本不要用最新版 推荐使用2.3版本即可 如果你安装最新版可能会出现自动将你本地的django版本升级为最新版
# 2.python解释器建议使用3.6版本(3.5可能会有问题,3.7可能会有问题 具体说明问题没有给解释)
pip3 install channels==2.3
"""channels模块内部帮你封装了握手/加密/解密等所有操作"""
Uso básico
-
Registrar aplicación
INSTALLED_APPS = [ 'channels' ]
Una vez completado el registro, django no se iniciará y notificará directamente un error
CommandError: no ha configurado ASGI_APPLICATION, que es necesario para ejecutar el servidor.
-
Configuracion
# 2 配置变量 ASGI_APPLICATION = 'day01.routing.application' ASGI_APPLICATION = '项目名同名的文件名.文件夹下py文件名默认就叫routing.该py文件内部的变量名默认就叫application'
-
Vaya a la carpeta con el mismo nombre de proyecto y cree un nuevo archivo py para definir la variable de aplicación
from channels.routing import ProtocolTypeRouter,URLRouter application = ProtocolTypeRouter({ 'websocket':URLRouter([ # 书写websocket路由与视图函数对应关系 ]) })
Una vez completada la configuración de la operación anterior, el inicio de Django comenzará desde el wsgiref original hasta el inicio de asgi (interno: Daphne)
Y después de comenzar, django admite el protocolo websocket y http
La operación basada en http todavía se realiza en urls.py y views.py
Las operaciones basadas en websocket se realizan en routing.py y consumer.py (creado en la aplicación correspondiente)