通過前幾章的介紹,大概瞭解了怎樣利用flask框架來開發服務端後端,但flask只是一個web框架,提供使用者便捷的開發方式,它並不是一個真正的web伺服器程式,想要這個服務端應用能夠支援高併發、高效能的訪問,還是需要將flask應用部署到真正的web伺服器上,nginx就是起到這個作用的,想要將flask和nginx聯合起來,需要一個叫wsgi的中介軟體,這裡選擇gunicorn來進行這個工作,下面進行這幾個名詞的解釋;
nginx:一個高效能的http和反向代理伺服器,在高併發方面有良好的表現;
wsgi:全稱是web server gateway interface,它是伺服器程式和應用程式之間的一個約定,它規定了兩者各實現什麼功能,以便它們能夠配合使用,作為中介軟體粘合伺服器程式和應用程式;
gunicorn:一個開源的全python實現的wsgi程式,在效能和功能上的表現都很不錯,很便於開發;
安裝gunicorn
簡單的使用pip命令即可安裝了:
1 |
pip install gunicorn |
例如這時你的flask程式檔案為run.py,則使用gunicorn來執行flask的命令為:
1 |
gunicorn -b 127.0.0.1:12345 run:app |
其中-b為監聽的ip和埠,run為檔名,app為建立的flask物件的名稱,另外gunicorn預設使用同步阻塞的網路模型,可用通過配置來進行修改:
1 |
gunicorn -k gevent -b 127.0.0.1:12345 run:app |
可以通過ps檢視gunicorn的執行情況:
gunicorn與nginx類似採用多程式模式,一個master程式和多個worker程式協同工作,可以根據自己的cpu數進行配置使用–worker選項
接下來是將gunicorn與nginx進行對接,可以使用nginx的代理功能,將http請求代理到gunicorn的監聽埠上來,在nginx的配置檔案中新增:
1 2 3 4 5 6 7 8 9 10 11 |
server { ...... location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://127.0.0.1:12345; } ...... } |
如此一個簡單的服務端架構就搭建好了,之後就是不斷的豐富它的內容,和優化它的效能了。