什么是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給了你一個簡單易用的抽象顧客。
注:如有描述不正的地方,請與我聯系