什么是Channels?
Channels扩展了Django的一个新的图层。它能使我们像处理其它视图一样处理WebSocket并且可以像跑Django其它服务一样跑后台任务。
它是如何工作的?
它将Django分成两个进程类型,一个是处理http和WebSocket,另一个是用来运行视图、WebSocket的处理和后台任务。
它们通过ASGI(异步服务器网关接口)草案规范进行通讯,并允许更多的协议。
Channels不会在你的代码中加入异步IO、协程或者其它的异步代码,所有的业务逻辑都会在进程或者线程中运行。
我们需要怎么做才能使用Channels?
所有的东西都是可选的。如果你确定,你将要改变WSGI服务器,做如下工作:
一个ASGI服务器
Django运行python manage.py runworker
一些ASGI请求的路由。
当你的Django使用Channels,他的http请求还是会像以前一样传到django的视图系统。
Channels还有什么能给我们的?
它还包括如下特性:
能够很轻松一次为上千个客户端的支持http轮询长连接
对于WebSockets支持session和认证
根据网站的cookies自动登录WebSockets
大量触发事件的内置原语(聊天,实时博客等)
动态刷新
每个基础的url可以选择低级的http
可扩展性到其他协议或事件源(例如WebRTC,原始UDP,SMS)
它的扩展性如何?
是的,您可以运行任意数量的协议服务器(服务于HTTP和WebSockets的协议服务器