1. 程式人生 > 實用技巧 >wsgi和asgi的關係

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給了你一個簡單易用的抽象顧客。

注:如有描述不正的地方,請與我聯絡