Django Channels教程(一)

来源:互联网 发布:做x展架用什么软件 编辑:程序博客网 时间:2024/06/16 06:12

什么是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的协议服务器)和运行Django代码的服务器(适用于您的用例)

ASGI规范允许在这两个组件之间插入许多不同的通道层,具有不同的性能特征,并且其设计允许容易的分片以及使用自己的协议和工作服务器运行单独的集群的能力。

为什么不使用消息队列?
Channels被有意地设计为低延迟(目标是几毫秒),并且超过保证传送的高吞吐量,这与某些消息队列设计不匹配。

某些功能(如保证消息排序)在选择启用时会导致性能下降,但可以更多的消息队列。

我们需要担心我们代码对于异步的友好性?
不需要担心,所有的代码都是同步运行,没有任何socket或事件循环阻止。 如果您喜欢,您可以在Django视图或 channel consumer中使用异步代码 - 例如,并行获取大量网址,但不会影响整体部署的站点。

需要Django的版本号?
需要Django >= 1.8。Channels 还需要下载一些额外的依赖,你可以直接用pip进行下载。

原创粉丝点击