偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么選擇學(xué)習(xí) Sanic 框架

開(kāi)發(fā) 開(kāi)發(fā)工具
Sanic 會(huì)被看作是為 Flask 應(yīng)用帶來(lái) async/await 風(fēng)格編程的一種嘗試。雖然這可能是最初的概念驗(yàn)證的一個(gè)公平的觀(guān)點(diǎn),但 Sanic 在一個(gè)非常不同的道路上發(fā)展,其目標(biāo)和影響是成為一個(gè)為性能應(yīng)用設(shè)計(jì)的強(qiáng)大工具。

Web Server 和框架

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

那么什么是 Web Server?

Web Server

Web服務(wù)器是一種軟件,旨在通過(guò) HTTP 協(xié)議傳遞文檔和數(shù)據(jù)。它的功能是接受傳入的 HTTP 請(qǐng)求,對(duì)消息進(jìn)行解碼以了解請(qǐng)求試圖完成的任務(wù),并提供適當(dāng)?shù)捻憫?yīng)。Web 服務(wù)器的語(yǔ)言是 HTTP 協(xié)議。

我們可以設(shè)置一個(gè)簡(jiǎn)單的Sanic服務(wù)器,然后從 curl 發(fā)出請(qǐng)求,并查看消息。

  1. 創(chuàng)建一個(gè)server.py 文件,寫(xiě)入如下代碼:

圖片

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)
  1. 執(zhí)行sanic server.app ,運(yùn)行該服務(wù)器
  2. 打開(kāi)另一個(gè)終端,運(yùn)行curl localhost:8088 -d '{"foo": "bar"}' 語(yǔ)句,能看到如下輸出:

圖片

然后回到另一個(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é)議
  • 接下來(lái)是 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)描述
  • 接下來(lái)是 HTTP 頭的列表,每行一個(gè),格式為 key:value
  • 最后是HTTP正文(如果有),前面有一個(gè)空行。

圖片

雖然這是 Web 服務(wù)器的語(yǔ)言,但編寫(xiě)所有這些內(nèi)容非常麻煩。因此,Web 瀏覽器和 HTTP 客戶(hù)端庫(kù)等工具被創(chuàng)建來(lái)為我們構(gòu)建和解析這些消息。

Web 框架

當(dāng)然,我們可以用 Python 編寫(xiě)一個(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)求。許多框架通過(guò)提供便利和實(shí)用程序來(lái)進(jìn)一步簡(jiǎn)化流程。

Python 生態(tài)系統(tǒng)中有許多 Web 框架在不同程度上完成了這項(xiàng)工作。有些提供了大量的功能,有些則非常稀少。有些非常嚴(yán)格,有些則更加開(kāi)放。Sanic 只在不妨礙開(kāi)發(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è)類(lèi)似的模式:一個(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)之一,并且在很大程度上是它勝過(guò)其他大多數(shù) Python 框架的原因。Sanic 服務(wù)器的開(kāi)發(fā)非常注重性能和請(qǐng)求/響應(yīng)周期的最小化。然而,近年來(lái) Sanic 也采用了 ASGI 接口,使其能夠由 ASGI 網(wǎng)絡(luò)服務(wù)器運(yùn)行。

Sanic 具備開(kāi)箱即用的功能,它可以用于編寫(xiě),部署和擴(kuò)展生產(chǎn)級(jí) Web 應(yīng)用程序。

為什么選擇 Sanic 框架學(xué)習(xí)呢?官方給出了 6 個(gè)原因:

特征(Features)

  • 內(nèi)置極速 web server
  • 生產(chǎn)準(zhǔn)備就緒
  • 極高的拓展性
  • 支持 ASGI
  • 簡(jiǎn)單直觀(guān)的 API 設(shè)計(jì)
  • 社區(qū)保障

總結(jié)

Sanic 會(huì)被看作是為 Flask 應(yīng)用帶來(lái) async/await 風(fēng)格編程的一種嘗試。雖然這可能是最初的概念驗(yàn)證的一個(gè)公平的觀(guān)點(diǎn),但 Sanic 在一個(gè)非常不同的道路上發(fā)展,其目標(biāo)和影響是成為一個(gè)為性能應(yīng)用設(shè)計(jì)的強(qiáng)大工具。

因此,Sanic 通常被那些希望建立一個(gè)豐富環(huán)境的開(kāi)發(fā)者和團(tuán)隊(duì)所使用,以解決他們的應(yīng)用需求所要求的獨(dú)特的、明顯的設(shè)計(jì)模式。該項(xiàng)目的意圖是消除構(gòu)建網(wǎng)絡(luò)服務(wù)器的困難或繁瑣部分,并提供工具來(lái)創(chuàng)建高性能和可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。

責(zé)任編輯:武曉燕 來(lái)源: 宇宙之一粟
相關(guān)推薦

2012-05-15 15:44:00

Silverlight

2011-11-28 10:21:52

Nginx特性

2021-04-25 10:26:34

Python機(jī)器學(xué)習(xí)人工智能

2012-09-26 10:02:44

框架開(kāi)發(fā)項(xiàng)目

2009-06-25 15:09:34

選擇JSFESRI

2012-02-28 09:11:51

語(yǔ)言Lua

2009-12-21 17:11:38

Linux認(rèn)證

2016-08-19 16:27:52

數(shù)據(jù)庫(kù)Mongo DB開(kāi)發(fā)

2012-11-14 20:55:07

容錯(cuò)服務(wù)器選型CIO

2017-02-27 15:19:04

2013-10-22 15:18:19

2020-06-10 09:06:48

MongoDB架構(gòu)高可用

2011-04-14 09:30:15

集合框架

2022-02-07 23:05:11

tailwindcsCSS框架

2023-03-21 08:02:36

Redis6.0IO多線(xiàn)程

2022-11-14 21:34:17

2011-06-16 15:29:22

2021-02-01 07:20:51

KafkaPulsar搜索

2016-09-27 21:25:08

Go語(yǔ)言Ken Thompso

2020-06-15 10:11:05

PHP語(yǔ)言框架
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)