1、Web编程:WSGI
WSGI将Web服务分为两个部分:服务器和应用程序。WSGI服务器只负责与网络相关的两件事:接收浏览器的HTTP请求、向浏览器发送HTTP应答;而对HTTP请求的具体处理逻辑,则通过调用WSGI应用程序进行。WSGI的更多信息见:Web开发:CGI和WSGI。
实现一个WSGI应用,只需要满足3个要求:
- 是可调用的,比如是一个函数,或者是一个可调用类(具有__call__方法)的实例
- WSGI应用应当返回一个可迭代(iterable)的值,比如字符串列表
- WSGI应用在返回之前,应当调用WSGI服务器传入的start_response函数发送状态码和HTTP报文头
2、常用的WSGI服务器
2.1、wsgiref
wsgiref是WSGI规范的一个参考实现,它可以用来向web服务器或框架添加WSGI支持。它提供了操作WSGI环境变量和响应头的实用程序,用于实现WSGI服务器的基类,一个为WSGI应用程序提供服务的演示HTTP服务器,以及一个验证工具,它检查WSGI服务器和应用程序是否符合WSGI规范(PEP 3333)。
2.2、uWSGI
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种通信协议。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。
使用uWSGI时,web的访问过程如下:
详细内容请参考:https://blog.csdn.net/yjk13703623757/article/details/79457913
2.3、gunicorn
Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。
Gunicorn 服务器作为wsgi app的容器,能够与各种Web框架兼容(flask,django等),得益于gevent等技术,使用Gunicorn能够在基本不改变wsgi app代码的前提下,大幅度提高wsgi app的性能。
3、Web框架
3.1、Python常用Web框架
Django:一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。自带的服务器基于Python wsgiref 模块实现。
Flask:Flask是一个使用Python编写的轻量级 Web 应用框架。其WSGI工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
Tornado是一个异步网络库以及基于此之上的web架构库因此它包含四个部分:
一套适应web应用开发的框架,以这个架构可很快构建web应用;
涉及web应用的http协议和websocket协议的实现(客户端/服务器端);
非阻塞的异步网络通讯库;
异步操作的协程(coroutine)库。