Web開發

武曉兵發表於2014-10-14

1.什麼是WSGI?

  • WSGI,全稱 Web Server Gateway Interface ,或者 Python Web Server Gateway Interface ,是作為Python 語言定義的 Web 伺服器和 Web 應 用程式或應用框架之間的一種低階別的介面,用來提升可移植Web應用開發的共同點;

  • WSGI是基於現存的CGI(通用閘道器介面)標準而設計的;

  • WSGI可以認為是一種 web server 如何與 web application 通訊的規範,或者是一種協議;

2.伺服器與應用程式直接的關係

  • WSGI區分為兩個部分: 一為“伺服器”或“閘道器” ,另一為 “應用程式”或“應用框架”

  • 在處理一個WSGI請求時,伺服器會為應用程式提供環境資訊及一個回撥函式(Callback Function);

  • 當應用程式完成處理請求後,透過前述的回撥函式,將結果回傳給伺服器;

3.WSGI中介軟體

  • 所謂的 WSGI 中介軟體同時實現了API的兩方,因此可以在WSGI伺服器和WSGI應用之間起調解作用:從Web伺服器的角度來說,中介軟體扮演應用程式 ,而從應用程式的角度來說,中介軟體扮演伺服器;

“中介軟體”元件的功能有:

  • 重寫環境變數後,根據目標URL,將請求訊息路由到不同的應用物件;

  • 允許在一個程式中同時執行多個應用程式或應用框架;

  • 負載均衡和遠端處理,通過在網路上轉發請求和響應訊息;

  • 進行內容後處理,例如應用XSLT樣式表;

4.支援WSGI規範的Web應用框架


BlueBream
bobo
Bottle
CherryPy
Django
Flask
Google App Engine's webapp2
Gunicorn
prestans
Pylons
Pyramid
restlite
Tornado
Trac
TurboGears
Uliweb
web.py
web2py
weblayer
Werkzeug

5.什麼是uwsgi

  • uwsgi與WSGI一樣是一種通訊協議或規範,是uWSGI伺服器的獨佔協議,用於定義傳輸資訊的型別,每一個uwsgi packet前4byte為傳輸資訊型別的描述,與WSGI協議是兩種東西,據說該協議是fcgi協議的10倍快;

6.什麼是uWSGI伺服器

1.png
2.png

  • uWSGI伺服器是一個web伺服器,實現了基於uwsgi協議的server部分,類似於Java的Tomcat,實現了WSGI協議、uwsgi協議、http協議等, 能夠將 http請求進行處理,在內部處理的邏輯從表面上看類似將HTTP請求轉化為WSGI協議的請求,其為部署分散式叢集的網路應用提供了一套完整的解決方案;

  • uWSGI的主要特點是:強悍的響應效能,低記憶體佔用,多app管理,詳盡的日誌功能以及高度可定製;

  • 只需要在uWSGI的配置檔案中指定application的地址,uWSGI就能直接和應用框架中的WSGI application通訊,這就是常用的 uWSGI + Django 開 發模式,如果需要Nginx做反向代理等功能,可以將整個web伺服器擴充套件為 Nginx + uWSGI + Django 開發模式;

7.web開發入門

  • wsgiref 模組實現的 WSGI Server + 自實現的 WSGI Application

from wsgiref.simple_server import make_server
def wsgi_application(environ, start_response):
    status = '200 OK'
    headers = [('Content-Type', 'text/html;charset=utf-8')]
    start_response(status, headers)
    html_template = '<h1> Hello World <h1>'.encode()
    return [html_template, ]
if __name__ == '__main__':
    HOST = '127.0.0.1'
    PORT = 9000
    server = make_server(HOST, PORT, wsgi_application)
    server.serve_forever()

  • wsgiref模組提供了一個WSGI Server伺服器實現的參照樣本,在生產開發Web伺服器不能使用這個模組,僅僅是用來學習的伺服器模組,重點是學習 WSGI Server實現的原理Django的WSGI Server伺服器也不能作為生產Web伺服器提供服務,因為Django的WSGI Server也是一個實驗型別的WSGI Server;

  • Django的WSGI Server伺服器也不能作為生產Web伺服器提供服務,因為Django的WSGI Server也是一個實驗型別的 WSGI Server

  • 在生產中通常使用高效能的WSGI Server,例如:uWSGI伺服器,Gunicorn伺服器( Jumpserver 使用這個這個 WSGI Server 伺服器, 後端的 WSGI Application 是Django的Application);

參考: https://www.9xkd.com/user/plan-view.html?id=2127616869

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69908432/viewspace-2642862/,如需轉載,請註明出處,否則將追究法律責任。