基于TCP的web服务器:使用套接字与并发模式
向客户端返回HTML页面,向程序员返回API
10.1WSGI
Python服务被编写为CGI脚本,收到请求出发CGI脚本。
服务器分割HTTP请求,参数以环境变量传入CGI脚本
为每个请求启动新进程
服务器同时支持静态与动态内容
web服务器网关接口:WSGI
任何问题都可以通过添加中间层解决
通过WSGI提供的中间层,python编写的HTTP服务与Web服务器交互
WSGI:调用惯例。
WSGi应用程序:可被调用,Input:2(environ字典——CGI环境变量的扩充,可调用对象)
return:可迭代对象生成字符串,或直接返回字符串
未来Python服务:一系列WSGI包装函数。提供:认证,捕捉异常,记录日志等功能
主要原因:应用程序/框架与web服务器之间的可插拔性
10.2异步服务器与框架
WSGi尚未支持协程的异步服务器
WSGi可调用对象设计面向传统的多线程,多进程服务器
需要IO操作时,可调用对象被阻塞
没有提供可调用对象返还控制权给主服务器的机制(主程序轮流调度不同可调用对象)
异步将整个逻辑分为多个小型非阻塞代码块
处理异步问题的python 项目,在各自的引擎上提供一个HTTP服务器,自行指定调用惯例(将解析得到的请求信息传递给处理请求的代码)
无法单独选择异步服务器与web框架
asyncio引擎:提供一个统一的接口,不同的异步框架直接用不同的事件循环实现
没有指定专用于HTTP消息的API
使用异步引擎需选择合适的服务器——框架(解析请求构造响应)组合
10.3前向代理与反向代理
HTTP代理:HTTP服务器,接收请求(服务器),转发(客户端)
前向(客户端):缓存重复请求的资源。随着隐私与安全的强化,请求不可解析。
反向代理:保存缓存。检查有效期。缓存失效则将请求发送给服务器
审查请求的合法性
缓存相关的HTTP头与客户端相关,也与服务器架构间通信相关
中间层缓存
10.4 4种架构
python服务器,直接调用WSGI接口
如果使用异步引擎,服务器与框架必须运行在同一进程
Apache c引擎 静态资源请求
mod_wsgi启动守护进程,调用python解释器
不适用于异步框架
前端服务器Apache:返回静态文件,负载均衡
:反向代理python动态资源服务
反向代理——Apache——pythonHTTP服务器
架构的选择:Cpython的三个运行时特性,解释器内存占用大,解释器运行慢,全局解释器锁(GIL)
GIL:禁止多个线程同时运行Python字节码
鼓励多个独立的进程,而非共享进程空间的多个python线程。相对的解释其占内存,同时存在的python实例有限,进程数有限。
10.5
传统的而