随笔 - 65  文章 - 0 评论 - 0 阅读 - 28752
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一 CGI协议

 

公共网关接口(Common Gateway Interface,CGI)是最早的Web服务器主机提供信息服务的标准接口规范。只要实现了CGI协议,Web服务器就能够获取并了解客户端提交的信息,转交给服务器端的web应用程序进行处理,最后返回结果给客户端。只有Web服务器和Web应用程序都实现了网关接口规范以后,双方的通信才能顺利完成。常见的网关接口协议:CGI,FastCGI,WSGI,ASGI。

 

  定义 区别
web服务器 是一种运行于网站后台(物理服务器)的软件。Web服务器主要用于提供网页浏览或文件下载服务,它可以向浏览器等Web客户端提供html网页文档等相关资源的,也可以提供其他类型的可展示文档,让客户端用户浏览;还可以提供数据文件下载等。目前世界上最主流的Web服务器有 Nginx、Apache、IIS、tomcat。
  1. web服务器启动运行,web应用程序才能被用户访问到。
  2. Web应用程序主要是完成web应用的业务逻辑的处理,Web服务器则主要是应对外部请求的接收、响应和转发。
web应用程序 Web应用程序(Web Programming Application)是一种能完成web业务逻辑,能让用户基于web浏览器访问的应用程序,它可以是一个实现http请求和响应功能的函数或者类,也可以是Django、Flask、sanic、FastAPI等这样的web框架

 

二 WSGI协议

协议

Web服务器网关接口(Python Web Server Gateway Interface,WSGI),是Python编程语言为了解决Web服务器端与客户端之间的通信基于CGI标准而设计的接口规范实现了WSGI协议的web服务器有:uWSGIuvicorngunicorn

开发中常用的Django内部启动了wsgiref模块作为web服务器运行的。wsgiref是python内置的一个简单地遵循了wsgi接口规范的web服务器。

2.1 uWSGI

uWSGI是一个快速的,自我驱动的,对开发者和系统管理员友好的web应用服务器,由 C语言编写的,内部实现了wsgi,uwsgi,http等协议。

注意:uwsgi协议是一个 uWSGI服务器自有的协议,用于定义传输信息的类型,常用于uWSGI服务器与其他网络服务器(例如:nginx)的数据通信中。

uWSGI在Django中的安装配置

给conda设置添加一个下载模块包的频道

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查看

 

三 ASGI协议

ASGI,是基于WSGI接口规范之上的异步服务器网关接口规范,是WSGI的延伸和扩展。A指的是Async,异步的意思。

 

3.1 Uvicorn

Uvicorn 是一个快速的 ASGI 服务器,Uvicorn 是基于 uvloop和 httptools模块构建的,是Python异步生态中重要的一员。Uvicorn 当前支持 HTTP / 1.1 和 WebSockets,将来计划支持HTTP/2。

Uvicorn在Django中的安装配置

安装uvicorn

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
posted on   大明花花  阅读(841)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示