python web下的伺服器結構——WSGI容器、Nginx、Flask之間的關係
python web下的應用結構主要為:
從下往上開始介紹:
客戶端:瀏覽器或者app。
web伺服器:Web伺服器是指駐留於因特網上某種型別計算機的程式。當Web瀏覽器(客戶端)連到伺服器上並請求檔案時,伺服器將處理該請求並將檔案傳送到該瀏覽器上,附帶的資訊會告訴瀏覽器如何檢視該檔案(即檔案型別)。伺服器使用HTTP(超文字傳輸協議)進行資訊交流,這就是人們常把它們稱為HTTP伺服器的原因。
嚴格意義上Web伺服器只負責處理HTTP協議,用於處理靜態頁面的內容。而動態內容需要通過WSGI介面交給應用伺服器去處理。
Web伺服器包括Nginx,Apache,IIS等。而優秀的web伺服器在接收http請求時,還可以做負載均衡和反向代理等工作。
WSGI容器:常見的WSGI容器有Gunicorn,uWSGI等。web框架和web伺服器之間需要通訊,這時候需要設計一套雙方都遵守的藉口。PEP3333指出,WSGI(Web Server Gateway Interface)是WEB伺服器和web框架或web應用之間建立的一種簡單通用的介面規範。有了wsgi這份介面規範,在web開發的過程中,能更加自由的選擇伺服器端和框架;在伺服器端和框架的開發過程能夠分離開來,不用過多的考慮雙方具體的實現,使得伺服器端和框架開發者能夠專心自己領域的開發工作。而WSGI容器就是根據這套介面寫出來的。WSGI容器的作用就是根據web伺服器傳遞而來的引數構建一個讓WSGI應用成功執行的環境,例如request,而且還得把WSGI應用上處理好的結果返回給web伺服器。此外WSGI容器也叫應用伺服器。
注: 一般應用伺服器都整合了web伺服器,主要是為了除錯方便,出於效能和穩定性考慮,並不能在生產環境中使用。
web框架:作用主要是方便我們開發 web應用程式,HTTP請求的動態資料就是由 web框架層來提供的。常見的 web框架有Flask,Django,Tornado等,而Tornado不光是一個web框架,還實現了WSGI容器的功能。
這裡做個補充記錄:
都知道Flask是一個web框架,而且Flask是基於werkzeug開發的,那werkzeug是什麼呢?
Werkzeug是一個WSGI工具包,他可以作為一個Web框架的底層庫。這裡稍微說一下, werkzeug 不是一個web伺服器,也不是一個web框架,而是一個工具包,官方的介紹說是一個 WSGI 工具包,它可以作為一個 Web 框架的底層庫,因為它封裝好了很多 Web 框架的東西,例如 Request,Response 等等。使用它可以減輕web框架開發工作量。我看過werkzeug的原始碼後發現,werkzeug也實現了WSGI容器的功能,而且利用python/http/server.py庫實現了一個簡易的http伺服器。因此在除錯的時候可以直接使用app.run()把伺服器給執行起來。
相關文章
- Flask初探之WSGIFlask
- 基於Python的web架構之Tornado+FlaskPythonWeb架構Flask
- Web3和元宇宙之間的關係Web元宇宙
- Python web離不開的WSGIPythonWeb
- 網站和伺服器之間的關係網站伺服器
- 【java】類之間的關係Java
- Python中怎樣改變集合之間的關係?Python
- 關於 Flask Web 開發的個人小結FlaskWeb
- 資料結構與演算法之間有何關係?資料結構演算法
- Window、WindowManager、View 之間的關係View
- git、github、gitlab之間的關係GithubGitlab
- Python和人工智慧之間存在怎樣的關係?Python人工智慧
- 容器、容器雲和容器化PaaS平臺之間究竟是什麼關係?
- 資料結構之資料、資料元素、資料項、資料物件之間的關係資料結構物件
- 前端建構函式、原型、例項物件之間的關係前端函式原型物件
- React、Ant Design、DvaJS之間的關係ReactJS
- Activity、View、Window之間關係的分析View
- UML類圖--類之間的關係
- 思考 TPS 與 RT 之間的關係
- Window, WindowManager和WindowManagerService之間的關係
- 類與類之間的基本關係
- Python Web開發:從 wsgi 開始PythonWeb
- react、redux、react-redux之間的關係ReactRedux
- Java設計模式-類之間的關係Java設計模式
- Linux Shell檔案之間的包含關係Linux
- 類之間的6種關係詳解
- 介面、抽象類、普通類之間的關係抽象
- GeoTools應用-JTS(Geometry之間的關係)
- Python全棧Web(Flask框架、多表關聯)Python全棧WebFlask框架
- 設計,架構,框架之間是什麼關係?架構框架
- HBase 的結構與表的對應關係
- 詳解js原型,建構函式以及class之間的原型關係JS原型函式
- python與人工智慧之間有什麼關係?Python人工智慧
- 通俗地理解面向服務的架構(SOA)以及微服務之間的關係架構微服務
- Docker宿主機和容器之間的繫結Docker
- Python中的賦值與淺複製與深複製之間的關係Python賦值
- 請描述下js的原型和原型鏈的理解以及它們之間的關係JS原型
- TLS與SSL之間關係TLS
- CPU、記憶體、磁碟IO之間的關係記憶體