一 基本介绍
对像我这样不是专业做网络的人来说, 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
- 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: OS X 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/
查看是否正确
如下所示:
至此, 基本介绍结束, 假如你是一个不折不扣的精力旺盛的, 无所事事的, 敏而好学的, 三好学生. 那就可以看下面的索引, 东西多的让你学不完.
深入文档:
- https://uwsgi-docs-zh.readthedocs.io/zh_CN/latest/
- https://www.jianshu.com/p/679dee0a4193
来源: https://www.cnblogs.com/dylancao/p/11478441.html