一 CGI协议
公共网关接口(Common Gateway Interface,CGI)是最早的Web服务器主机提供信息服务的标准接口规范。只要实现了CGI协议,Web服务器就能够获取并了解客户端提交的信息,转交给服务器端的web应用程序进行处理,最后返回结果给客户端。只有Web服务器和Web应用程序都实现了网关接口规范以后,双方的通信才能顺利完成。常见的网关接口协议:CGI,FastCGI,WSGI,ASGI。
定义 | ||
web服务器 | 是一种运行于网站后台(物理服务器)的软件。Web服务器主要用于提供网页浏览或文件下载服务,它可以向浏览器等Web客户端提供html网页文档等相关资源的,也可以提供其他类型的可展示文档,让客户端用户浏览;还可以提供数据文件下载等。目前世界上最主流的Web服务器有 Nginx |
|
web应用程序 | Web应用程序(Web Programming Application)是一种能完成web业务逻辑,能让用户基于web浏览器访问的应用程序,它可以是一个实现http请求和响应功能的函数或者类,也可以是Django、Flask、sanic、FastAPI等这样的web框架 |
二 WSGI协议
协议
Web服务器网关接口(Python Web Server Gateway Interface,WSGI),
1 | conda config - - add channels conda - forgea |
conda环境安装uWSGI
1 | conda install uWSGI |
项目根目录下创建uwsgi的配置文件uwsgi.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [uwsgi] #使用nginx连接时使用,Django程序所在服务器地址 socket = 0.0 . 0.0 : 8000 #直接做web服务器使用,Django程序所在服务器地址 # http=0.0.0.0:8000 #项目目录 chdir = 项目根目录 #项目中wsgi.py文件的目录,相对于项目目录 wsgi - file = 主应用目录 / wsgi.py # 进程数 CPU * 2 -1 processes = 4 # 线程数 threads = 2 # uwsgi服务器的角色 master = True # 存放进程编号的文件 pidfile = uwsgi.pid # 日志文件,因为uwsgi可以脱离终端在后台运行,日志看不见。我们以前的runserver是依赖终端的 daemonize = uwsgi.log # 指定依赖的虚拟环境 virtualenv = 环境名称 |
终端下,在项目根目录下,启动uwsgi服务器
1 | uwsgi - - ini uwsgi.ini |
终端下,在项目根目录下,停止运行
1 | uwsgi - - stop uwsgi.pid # uwsgi.pid可通过ps aux | grep -Iuwsgi查看 |
Uvicorn 当前支持 HTTP / 1.1 和 WebSockets,将来计划支持HTTP/2。
1 | conda install uvicorn |
项目根目录下,使用uvicorn运行django项目
1 2 3 4 | # DEBUG模式,uvicorn 主应用目录名.asgi:application --reload,修改代码会自动重启项目 uvicorn demo.asgi:application - - reload # 多进程模式 --workers <int> 进程数量,cpu * 2 + 1 # uvicorn ademo.asgi:application --workers 4 |
一般使用gunicorn来管理uvicorn,这样可以一并安装并且提升当前web服务器应对高并发流量的支撑。
1 2 3 4 | # 安装gunicorn conda install gunicorn # 运行gunicorn gunicorn - w 4 ademo.asgi:application - k uvicorn.workers.UvicornWorker - - reload |
四 CGI/WSGI/ASGI协议的区别
协议,规范 | 支持的请求协议(常见,未列全) | 同步/异步 | 支持的框架 |
---|---|---|---|
CGI | HTTP | 同步 | CGI程序 |
WSGI | HTTP | 同步 | django3.0以前,Flask1.0 |
ASGI | HTTP,HTTP2,WebSocket等 | 同步/异步 | FastAPI,Tornado,django3.0以后,flask2.0,Quart,Sanic, |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现