一 基本介紹
對像我這樣不是專業做網絡的人來說,uuwsgi是一個陌生的東西。它是誰?它可以做什么?誰會用到它?
其實,在不知道一個東西是什么的情況下,能夠快速的了解並使用它,是一門很有藝術性的事情。最重要的是,它對你十分有價值。估計在你沒有花上幾分鍾了解它之前,你不會知道它是否對你有價值的。所以說,既然你能搜到我這篇文章,那就花幾分鍾看一下吧,估計看完第一節,你就知道是否有看第二節的必要了。
誰應該了解並使用它呢?
做web開發的技術人員,想做自己網站的業務人員,還有那些想學習web開發的學生,都應該或多或少的了解並學習一下uwsgi的。因為他在網站建設中應用的范圍是十分廣泛的。
它是什么?下面一段話估計能很好的解釋你的疑惑。
uWSGI旨在為部署分布式集群的網絡應用開發一套完整的解決方案。主要面向web及其標准服務。由於其可擴展性,能夠被無限制的擴展用來支持更多平台和語言。uWSGI是一個web服務器,實現了WSGI協議,uwsgi協議,http協議等。
uWSGI的主要特點是:
超快的性能
低內存占用
多app管理
詳盡的日志功能(可以用來分析app的性能和瓶頸)
高度可定制(內存大小限制,服務一定次數后重啟等)
uWSGI服務器自己實現了基於uwsgi協議的server部分,我們只需要在uwsgi的配置文件中指定application的地址,uWSGI就能直接和應用框架中的WSGI application通信。
假如你上面的這些看不懂,不要緊的,我再用通俗的語言給你解釋一下:uWSGI就是幫你管理創建的網站的一個工具。假如建立的web是你的孩子,它就是你孩子的貼身保姆,你孩子的吃喝拉撒它都能有辦法跟蹤並維護。這個你該了解了吧。
假如你還是一頭霧水。一個說明我的語言表達太差,需要鍛煉。另外一個說明它對你沒有價值,接下來的第二節就不要浪費時間了,第二節不是為你准備的了。
二 使用場景
uWSGI項目旨在為構建托管服務開發全棧。
使用通用的API和通用的配置風格來實現應用服務器 (對於各種編程語言和協議),代理,進程管理器和監控器。
由於其可插拔架構,可以對其擴展以支持更多的平台和語言。
目前,你可以用C, C++和Objective-C來編寫插件。
通用性、高性能、低資源使用和可靠性是該項目的強項(也是唯一遵循的法則)。
概念區分:
uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。
要注意 WSGI / uwsgi / uWSGI 這三個概念的區分。
WSGI是一種通信協議。
uwsgi是一種線路協議而不是通信協議,在此常用於在uWSGI服務器與其他網絡服務器的數據通信。
而uWSGI是實現了uwsgi和WSGI兩種協議的Web服務器。
uwsgi協議是一個uWSGI服務器自有的協議,它用於定義傳輸信息的類型(type of information),每一個uwsgi packet前4byte為傳輸信息類型描述,它與WSGI相比是兩樣東西。所以不要搞混了。
三 安裝方法
下面介紹幾個常用的安裝方法:
1 源碼安裝:
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd
make
sudo make install
2 使用python pip安裝
假如基礎不好的同學,建議使用這種,簡單明了:
pip install uwsgi
四 測試指南
定一個一個python文件,比如:test.py
內容為:
/usr/bin/python3 def application(env, start_response): start_response(‘200 OK’, [(‘Content-Type’,‘text/html’)]) return [b"This is XuSheng uWSGI test "]
假如你用的是python2,return后面的東西估計要改一下,具體怎么改就交給你了,不難的。
接下來,啟動uWSGI來運行一個HTTP服務 向你的SWGI 應用發起請求。
使用的命令如下:
uwsgi --http :9090 --wsgi-file test.py
接下來,你就可以通過log信息來看是否成功運行了:
本人正常的log信息:
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 1418
your memory page size is 4096 bytes
detected max file descriptor number: 7168
lock engine: OSX spinlocks
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :9090 fd 4
spawned uWSGI http 1 (pid: 30744)
uwsgi socket 0 bound to TCP address 127.0.0.1:54389 (port auto-assigned) fd 3
Python version: 3.7.1 (default, Dec 14 2018, 13:28:58) [Clang 4.0.1 (tags/RELEASE_401/final)]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x7ff902600e30
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72888 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
WSGI app 0 (mountpoint=’’) ready in 0 seconds on interpreter 0x7ff902600e30 pid: 30743 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 30743, cores: 1)
然后在瀏覽器中輸入:
http://127.0.0.1:9090
查看是否正確
如下所示:
至此,基本介紹結束,假如你是一個不折不扣的精力旺盛的,無所事事的,敏而好學的,三好學生。那就可以看下面的索引,東西多的讓你學不完。
深入文檔:
1 https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/