ASGI:异步网关协议接口,一个介于网络协议服务和Python应用之间的标准接口,能够处理多种通用的协议类型,包括HTTP,HTTP2和WebSocket。
然而目前的常用的WSGI主要是针对HTTP风格的请求响应模型做的设计,并且越来越多的不遵循这种模式的协议逐渐成为Web变成的标准之一,例如WebSocket。
ASGI尝试保持在一个简单的应用接口的前提下,提供允许数据能够在任意的时候、被任意应用进程发送和接受的抽象。并且同样描述了一个新的,兼容HTTP请求响应以及WebSocket数据帧的序列格式。允许这些协议能通过网络或本地socket进行传输,以及让不同的协议被分配到不同的进程中。
www.bilibili.com/video/BV1BZ…
其最重要的改变是支持了ASGI
要理解ASGI,要从之前的WSGI(Web Server Gateway Interface:web服务器网关接口)讲起,WSGI定义了Python程序如何和Web服务器进行通信.
总的来说,就是客户端发信息给服务端,服务端通过用WSGI协议通信的python程序去处理,处理结果也通过WSGI协议去传给Web服务器,然后Web服务器去响应请求。
消息通知机制——使用场景:比如网站别人评论了,需要将这个消息通知给我。
如何实现呢?
- 使用Http协议:客户端每隔一段时间就轮询(poll)询问是否有新的消息通知
这种方式缺点很明显,需要一直去轮询询问,有很多浪费的报文,增大了服务器的压力. 而且Http的形式太大了,它的Header里很多内容是不必要的,因为只是简单的问一下有没有新消息存在,只需要知道有或没有
- 使用WebSocket协议(也是一个TCP协议),其建立的是持久可双向通信的连接,然后服务器发现有评论后,主动向客户端推送.
这种方式,客户端不用去轮询了,只有在收到这个通知的时候,才会用一个回调机制去处理这个消息
ASGI提供了一种异步的处理方式…如上图所示…
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END