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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM