小背景
Java用的时间久了,web项目启动的时候直接启动主程序就行,因为spring web项目内置了Tomcat web服务器,服务器的配置一般也是采用默认的配置,所以很少关注底层实现,关注点主要在应用程序功能。
初学python的时候,创建web应用程序,通过命令之前启动就行,然后就可以访问了,以为底层也是内置了web服务器(确实有内置,后来才知道仅限于调式)。每次启动的时候总会有一行警告。刚开始学习的时候没有关注,只要提测后,发现根本没有并发,然后关注到WSGI的作用
运行python项目
1.1 flask项目
翻译,这是开发环境的服务器,生产环境请用WSGI的服务替换
1.2 Django项目
翻译,这是一个开发环境的服务器
1.3 总结
- python项目自带的服务器,主要用于开发环境,默认情况下都是单线程,处理能力有限
- Flask、Django和Fastapi都是开发web服务的框架,而非web服务器,为了方便本地开发内置了一个简易的web服务。
web服务器
web服务器特点
- 接受客户端(浏览器,app,小程序等)发送的请求
- web服务器通常都会支持高并发(Nginx上万级别的并发) 很多地方都是用到了Nginx作反向代理Web服务器,
了解下WSGI、uWSGI、Gunicorn之间关系
WSGI (Web Server Gateway Interface)
- 定义:WSGI 是一种规范,定义了 Python Web 服务器和 Web 应用或框架之间的接口。它允许不同的 Web 服务器和 Web 应用框架之间进行通信。
- 用途:WSGI 使得 Web 应用开发者可以专注于业务逻辑和内容生成,而不必处理底层的网络细节(如 HTTP 请求处理和响应生成)。
- 兼容性:WSGI 是 Python 标准库的一部分,几乎所有的 Python Web 框架(如 Django、Flask 等)都遵循 WSGI 规范。
uWSGI
- 定义:uWSGI 是一个 Web 服务器,实现了 WSGI 规范。它是一个多功能的服务器,可以作为独立服务器或嵌入式服务器运行。
- 用途:uWSGI 可以处理 HTTP、FastCGI、uwsgi 协议等多种协议,支持多种语言(包括 Python、Ruby、PHP 等)。它通常用于生产环境中,作为反向代理服务器或应用服务器。
- 特点:uWSGI 以其高性能和低资源消耗著称,支持多种工作模式(如同步、异步、多线程等)。
Gunicorn
- 定义:Gunicorn 是一个 Python WSGI HTTP 服务器,也称为“绿色独角兽”。它是一个预派生(pre-fork)工作模式的服务器,适用于 UNIX 系统。
- 用途:Gunicorn 主要用于运行 Python Web 应用,它可以与各种 Web 框架(如 Django、Flask 等)兼容。Gunicorn 通常作为 Web 应用的直接服务器,或与 Nginx 等反向代理服务器一起使用。
- 特点:Gunicorn 以其简单易用和高性能著称,支持多进程和多线程工作模式。它可以在命令行中配置,也可以通过配置文件进行更复杂的设置。
关系
- WSGI:是一种规范,定义了服务器和应用之间的通信方式。Gunicorn 和 uWSGI 都是实现了 WSGI 规范的服务器。
- uWSGI:是一个多功能的服务器,可以作为独立服务器或嵌入式服务器运行,支持多种协议和语言。
- Gunicorn:是一个更轻量级的服务器,专注于 Python Web 应用,通常与 WSGI 应用一起使用。
总结
WSGI web服务器,本质上是一个TCP服务器,监听在特定的端口上。支持HTTP协议,能够解析HTTP请求报文,能够按HTTP协议将响应数据封装为报文并返回给浏览器。实现了WSGI协议,该协议约定了和应用程序之间的接口
Gunicorn应用
命令行方式之间启动python项目
gunicorn -w 4 -b 0.0.0.0:9966 app:app -w 4
表示启动4个工作进程,-b 0.0.0.0:9966
表示监听本地8000端口
- 协议:
tcp
- 状态:
LISTEN
- 本地地址:
*:9966
(监听所有IP地址的9966端口) - 远程地址:
*:*
(不特定,表示不监听任何远程地址) - 用户:
users:(("gunicorn",pid=6457,fd=5),("gunicorn",pid=6456,fd=5))
这意味着有两个进程(PID 6457和6456)正在监听本地的9966端口,等待TCP连接。这两个进程都运行着gunicorn
程序,并且每个进程都使用文件描述符5来监听这个端口。
同时多个应用程序监听9966端口号
作者:海边捡石子
链接:https://juejin.cn/post/7392267900102361099