新聞中心
Web Server 和框架
Sanic 稱自己既是一個(gè)網(wǎng)絡(luò)框架,也是一個(gè)網(wǎng)絡(luò)服務(wù)器。這是什么意思?更重要的是,為什么這很重要?

十多年的立山網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整立山建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“立山網(wǎng)站設(shè)計(jì)”,“立山網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
那么什么是 Web Server?
Web Server
Web服務(wù)器是一種軟件,旨在通過 HTTP 協(xié)議傳遞文檔和數(shù)據(jù)。它的功能是接受傳入的 HTTP 請(qǐng)求,對(duì)消息進(jìn)行解碼以了解請(qǐng)求試圖完成的任務(wù),并提供適當(dāng)?shù)捻憫?yīng)。Web 服務(wù)器的語言是 HTTP 協(xié)議。
我們可以設(shè)置一個(gè)簡單的Sanic服務(wù)器,然后從 curl 發(fā)出請(qǐng)求,并查看消息。
- 創(chuàng)建一個(gè)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)
- 執(zhí)行sanic server.app ,運(yùn)行該服務(wù)器
- 打開另一個(gè)終端,運(yùn)行curl localhost:8088 -d '{"foo": "bar"}' 語句,能看到如下輸出:
然后回到另一個(gè)終端,能看到 HTTP 請(qǐng)求消息,如下內(nèi)容:
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 協(xié)議
- 接下來是 HTTP 頭的列表,每行一個(gè),格式為key:value
- 最后是 HTTP 正文,前面有一個(gè)空行。HTTP 響應(yīng)非常相似:
HTTP/1.1 200 OK
content-length: 4
connection: keep-alive
content-type: text/plain; charset=utf-8
Done
- 第一行包含 HTTP 協(xié)議,然后是 HTTP 狀態(tài)和狀態(tài)描述
- 接下來是 HTTP 頭的列表,每行一個(gè),格式為 key:value
- 最后是HTTP正文(如果有),前面有一個(gè)空行。
雖然這是 Web 服務(wù)器的語言,但編寫所有這些內(nèi)容非常麻煩。因此,Web 瀏覽器和 HTTP 客戶端庫等工具被創(chuàng)建來為我們構(gòu)建和解析這些消息。
Web 框架
當(dāng)然,我們可以用 Python 編寫一個(gè)程序,接收這些原始 HTTP 消息,對(duì)它們進(jìn)行解碼,然后返回一個(gè)適當(dāng)?shù)?HTTP 響應(yīng)消息。然而,這將需要大量的文件,難以擴(kuò)展,并且容易出錯(cuò)。
有一些工具可以幫我們做到這一點(diǎn):Web框架。Web 框架的工作是構(gòu)建 HTTP 消息并適當(dāng)?shù)靥幚碚?qǐng)求。許多框架通過提供便利和實(shí)用程序來進(jìn)一步簡化流程。
Python 生態(tài)系統(tǒng)中有許多 Web 框架在不同程度上完成了這項(xiàng)工作。有些提供了大量的功能,有些則非常稀少。有些非常嚴(yán)格,有些則更加開放。Sanic 只在不妨礙開發(fā)人員的情況下,才嘗試保持功能豐富的連續(xù)性。
Sanic提供的一個(gè)功能是,它既是一個(gè) Web 框架,也是一個(gè) Web 服務(wù)器。Web 框架做的就是有一個(gè)服務(wù)器調(diào)用一個(gè)輸入函數(shù),向其傳遞有關(guān)請(qǐng)求的信息,并得到響應(yīng)。
async/await 風(fēng)格的協(xié)程處理程序的項(xiàng)目,絕大多數(shù)都需要運(yùn)行一個(gè)ASGI服務(wù)器。它遵循一個(gè)類似的模式:一個(gè)ASGI就緒的服務(wù)器調(diào)用一個(gè)ASGI就緒的框架。
這兩個(gè)組件使用一個(gè)特定的協(xié)議相互操作。目前有三種流行的ASGI服務(wù)器:uvicorn、hypercorn和daphne。
Sanic
正因?yàn)?Sanic 誕生于 ASGI 之前的時(shí)代,它需要自己的服務(wù)器。隨著時(shí)間的推移,這已經(jīng)成為它最大的資產(chǎn)之一,并且在很大程度上是它勝過其他大多數(shù) Python 框架的原因。Sanic 服務(wù)器的開發(fā)非常注重性能和請(qǐng)求/響應(yīng)周期的最小化。然而,近年來 Sanic 也采用了 ASGI 接口,使其能夠由 ASGI 網(wǎng)絡(luò)服務(wù)器運(yùn)行。
Sanic 具備開箱即用的功能,它可以用于編寫,部署和擴(kuò)展生產(chǎn)級(jí) Web 應(yīng)用程序。
為什么選擇 Sanic 框架學(xué)習(xí)呢?官方給出了 6 個(gè)原因:
特征(Features)
- 內(nèi)置極速 web server
- 生產(chǎn)準(zhǔn)備就緒
- 極高的拓展性
- 支持 ASGI
- 簡單直觀的 API 設(shè)計(jì)
- 社區(qū)保障
總結(jié)
Sanic 會(huì)被看作是為 Flask 應(yīng)用帶來 async/await 風(fēng)格編程的一種嘗試。雖然這可能是最初的概念驗(yàn)證的一個(gè)公平的觀點(diǎn),但 Sanic 在一個(gè)非常不同的道路上發(fā)展,其目標(biāo)和影響是成為一個(gè)為性能應(yīng)用設(shè)計(jì)的強(qiáng)大工具。
因此,Sanic 通常被那些希望建立一個(gè)豐富環(huán)境的開發(fā)者和團(tuán)隊(duì)所使用,以解決他們的應(yīng)用需求所要求的獨(dú)特的、明顯的設(shè)計(jì)模式。該項(xiàng)目的意圖是消除構(gòu)建網(wǎng)絡(luò)服務(wù)器的困難或繁瑣部分,并提供工具來創(chuàng)建高性能和可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。
本文標(biāo)題:為什么選擇學(xué)習(xí) Sanic 框架
當(dāng)前網(wǎng)址:http://m.fisionsoft.com.cn/article/cooddsj.html


咨詢
建站咨詢
