wsgi和asgi的关系
什么是WSGI
#CGI
CGI(Common Gateway Interface,通用网关接口),定义客户端与Web服务器的交流方式的一个程序,例如正常情况下客户端发送过来一个请求,根据HTTP协议Web服务器将请求的内容解析出来,
经过处理会后,再将返回的内容封装好。例如服务器返回一个HTML页面,并且根据HTTP协议构建返回内容的响应格式,涉及到TCP连接、HTTP原始请求和相应格式都是由一个软件来完成,这个程序就是CGI。
#WSGI
WSGI(Python Web Server Gateway Interface,WSGI)Web服务器网关接口,是为Python语言定义的Web服务器和Web应用程序或框架之间的联系,那个简单而且通用的接口,
从语义上理解,WSGI为了解决Web服务器与客户端之间的通信问题而产生的。并且WSGI是基于现存的CGI标准而设计的,同样是一种程序
#ASGI
ASGI是异步网关协议接口,介于网络服务和python饮用应用之间的标准接口,能够处理多种通用的协议类型,包括http,http2和websocket.
#关于WSGI和ASGI的区别是
WSGI是基于http协议模式开发的,不支持websocket,而ASGI的诞生解决了python中的WSGI不支持当前的web开发中的一些新的协议标准,同时ASGI支持原有模式和Websocket的扩展, 即ASGI是WSGI的扩展.
HTTP的一个例子:
用户发出一个HTTP请求。
我们打开了一个新的http键入包含请求路径、方法、头等详细信息的范围。
我们发送一个http.request带有HTTP正文内容的事件
channels或ASGI应用程序对此进行处理,并生成http.response事件发送回浏览器并关闭连接。
HTTP请求/响应完成,作用域被破坏。
#注:一次客户端发出请求,服务器接收并回应请求消息,客户端停止访问,页面不动,服务断开,这就是cgi,在python里面它就是wsgi
聊天机器人的一个例子:
用户向聊天机器人发送第一条消息。
这将打开一个包含用户用户名、所选名称和用户标识的范围。
应用程序给出了一个chat.received_message使用eventtext事件。它不需要响应,但可以将一条、两条或更多其他聊天消息作为chat.send_message如果它想的话。
用户向聊天机器人发送更多信息chat.received_message事件被生成。
超时后或应用程序进程重新启动时,范围被关闭。
HTTP请求/响应完成,作用域被破坏
#注:用户向聊天机器人发送消息,通道打开,也就是范围开启,聊天机器人可以回应也可以不回应,在超时后或应用程序进程重新启动时,通道关闭,范围关闭,聊天结束。在下一次用户发送消息,通道打开,聊天继续
总结
在一个作用域的生命周期内——无论是聊天、HTTP请求、socketconnection还是其他什么——您将有一个应用程序实例处理其中的所有事件,并且您还可以将事情持久化到应用程序实例上。
如果你愿意,你可以选择写一个原始的ASGI应用程序,但是channels给了你一个简单易用的抽象顾客。
注:如有描述不正的地方,请与我联系
越努力越幸运