我打字形成的文檔為什么不能 轉存的其他存盤(為什么文檔不能打字了)
738
2022-05-30
Web Server 和框架
Sanic 稱自己既是一個網絡框架,也是一個網絡服務器。這是什么意思?更重要的是,為什么這很重要?
那么什么是 Web Server?
Web Server
Web服務器是一種軟件,旨在通過 HTTP 協議傳遞文檔和數據。它的功能是接受傳入的 HTTP 請求,對消息進行解碼以了解請求試圖完成的任務,并提供適當的響應。Web 服務器的語言是 HTTP 協議。
我們可以設置一個簡單的Sanic服務器,然后從 curl 發出請求,并查看消息。
創建一個server.py 文件,寫入如下代碼:
from sanic import Sanic, text, Request app = Sanic(__name__) @app.post("/") async def handler(request: Request): message = ( request.head + b'\n\n' + request.body ).decode("utf-8") print(message) return text("Done") app.run(port=8088, debug=True)
執行sanic server.app ,運行該服務器
打開另一個終端,運行curl localhost:8088 -d '{"foo": "bar"}' 語句,能看到如下輸出:
然后回到另一個終端,能看到 HTTP 請求消息,如下內容:
POST / HTTP/1.1 Host: localhost:8088 User-Agent: curl/7.68.0 Accept: */* Content-Length: 14 Content-Type: application/x-www-form-urlencoded {"foo": "bar"}
第一行包含 HTTP 方法、路徑和使用的 HTTP 協議
接下來是 HTTP 頭的列表,每行一個,格式為key:value
最后是 HTTP 正文,前面有一個空行。HTTP 響應非常相似:
HTTP/1.1 200 OK content-length: 4 connection: keep-alive content-type: text/plain; charset=utf-8 Done
第一行包含 HTTP 協議,然后是 HTTP 狀態和狀態描述
接下來是 HTTP 頭的列表,每行一個,格式為 key:value
最后是HTTP正文(如果有),前面有一個空行。
雖然這是 Web 服務器的語言,但編寫所有這些內容非常麻煩。因此,Web 瀏覽器和 HTTP 客戶端庫等工具被創建來為我們構建和解析這些消息。
Web 框架
當然,我們可以用 Python 編寫一個程序,接收這些原始 HTTP 消息,對它們進行解碼,然后返回一個適當的 HTTP 響應消息。然而,這將需要大量的文件,難以擴展,并且容易出錯。
有一些工具可以幫我們做到這一點:Web框架。Web 框架的工作是構建 HTTP 消息并適當地處理請求。許多框架通過提供便利和實用程序來進一步簡化流程。
Python 生態系統中有許多 Web 框架在不同程度上完成了這項工作。有些提供了大量的功能,有些則非常稀少。有些非常嚴格,有些則更加開放。Sanic 只在不妨礙開發人員的情況下,才嘗試保持功能豐富的連續性。
Sanic提供的一個功能是,它既是一個 Web 框架,也是一個 Web 服務器。Web 框架做的就是有一個服務器調用一個輸入函數,向其傳遞有關請求的信息,并得到響應。
async/await 風格的協程處理程序的項目,絕大多數都需要運行一個ASGI服務器。它遵循一個類似的模式:一個ASGI就緒的服務器調用一個ASGI就緒的框架。
這兩個組件使用一個特定的協議相互操作。目前有三種流行的ASGI服務器:uvicorn、hypercorn和daphne。
Sanic
正因為 Sanic 誕生于 ASGI 之前的時代,它需要自己的服務器。隨著時間的推移,這已經成為它最大的資產之一,并且在很大程度上是它勝過其他大多數 Python 框架的原因。Sanic 服務器的開發非常注重性能和請求/響應周期的最小化。然而,近年來 Sanic 也采用了 ASGI 接口,使其能夠由 ASGI 網絡服務器運行。
Sanic 具備開箱即用的功能,它可以用于編寫,部署和擴展生產級 Web 應用程序。
為什么選擇 Sanic 框架學習呢?官方給出了 6 個原因:
特征(Features)
內置極速 web server
生產準備就緒
極高的拓展性
支持 ASGI
簡單直觀的 API 設計
社區保障
總結
Sanic 會被看作是為 Flask 應用帶來 async/await 風格編程的一種嘗試。雖然這可能是最初的概念驗證的一個公平的觀點,但 Sanic 在一個非常不同的道路上發展,其目標和影響是成為一個為性能應用設計的強大工具。
因此,Sanic 通常被那些希望建立一個豐富環境的開發者和團隊所使用,以解決他們的應用需求所要求的獨特的、明顯的設計模式。該項目的意圖是消除構建網絡服務器的困難或繁瑣部分,并提供工具來創建高性能和可擴展的網絡應用。
HTTP web前端
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。