今天介绍下如何在django中使用channels实现websocket。其实还可以使用dwebsocket实现websocket,这里不做介绍。
首先介绍一个概念ASGI。
ASGI异步网关协议接口,一个介于网络协议服务和Python应用之间的标准接口,能够处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket。
然而目前的常用的WSGI主要是针对HTTP风格的请求响应模型做的设计,并且越来越多的不遵循这种模式的协议逐渐成为Web变成的标准之一,例如WebSocket。
ASGI尝试保持在一个简单的应用接口的前提下,提供允许数据能够在任意的时候、被任意应用进程发送和接受的抽象。并且同样描述了一个新的,兼容HTTP请求响应以及WebSocket数据帧的序列格式。允许这些协议能通过网络或本地socket进行传输,以及让不同的协议被分配到不同的进程中。
下面开始介绍下channels
channels是对django的扩展,使其可以支持WebSockets, chat protocols, IoT protocols,或者更多。channels基于ASGI。
下面开始介绍channels实现websocket的配置:
1.环境
python3.6 channels2.1.7 channels-redis2.3.3 django2.0.5 drf3.9.2
2.配置
其中test01是app名称 DjangoChannel2是项目名称
test01.routing.py:

test01.consumer.py:

DjangoChannel2.routing.py:

DjangoChannel2.asgi.py:

DjangoChannel2.settings.py:

以上就是配置的过程。
3.前端index.html

其中websocket请求url中
ws://127.0.0.1:8000/ws/status/1/
数字1可以表示不同客户端,也可以是2、3等数字。
经过上面的配置后,django中就可以实现websocket功能了。
今天就介绍到这里。有问题环境私信交流。