admin管理员组文章数量:1794759
Python Web开发之WSGI
Python Web开发之WSGI
WSGI(全称Web Server Gate Interface,Web服务器网关接口)是Python为了规范和简化Web服务开发过程,定义了一种Web服务器和应用框架之间的简单而通用的接口标准规范,即规定了请求的URL到后台处理函数之间改如何实现。WSGI在Python Web开发中地位显著,但是仅通过它开发Web还是过于底层,应用较广的那些Django、Falsk等开发框架,都是在WSGI基础上抽象了一层,使得更加专注于业务应用设计,避免过多精力耗费在网络协议间的解析与转换。
请求过程Web 编程就是对HTTP协议的应用,我们能使用 socket 自制 web 服务器,但每次都需要自己处理协议的内容很烦琐,所以可以把HTTP协议的东西外包给专门的HTTP服务器软件,而 python 就只是单纯的负责处理业务,再通过 WSGI 把两者关联起来。
如上图所示,常规流程如下:
从上述一系列流程可看出,WSGI web服务器,本质上是一个TCP服务器,监听在特定的端口上。支持HTTP协议,能够解析HTTP请求报文,能够按HTTP协议将响应数据封装为报文并返回给浏览器。实现了WSGI协议,该协议约定了和应用程序之间的接口,即url到app之间的映射。WSGI应用程序,遵从WSGI协议,本身是一个可调用对象,调用start_response,返回响应头部,返回包含正文的可迭代对象。
wsgiref库wsgiref是python的一个内置库,遵循WSGI接口服务协议规范。只需要简单几步的接口调用,就可以搭建一个建议web服务器,搭建如下:
Web服务搭建完成口,可直接浏览器访问,获取信息反馈如下:
WSGI 演化uwsgi:与WSGI一样是一种通信协议,是uWSGI服务器的独占协议,用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。使用C语言开发,会和底层接触的更好,配置也是比较方便。
uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等。主要特点是:超快的性能、低内存占用、多app管理、详尽的日志功能(可以用来分析app的性能和瓶颈)、高度可定制(内存大小限制,服务一定次数后重启等)。
本地开发及调试过程中,利用WSGI搭建localhost服务器即可满足需要。然而,实际生产环境需要满足更高的要求和多样化应用场景,单一的WSGI显然无法满足。
当前二级结构,WSGI作为服务器,到了HTTP协议以及wsgi协议,Django应用作为application,实现了wsgi协议。当有客户端发来请求,WSGI服务接受请求,调用Django app得到相应,之后相应给浏览器。
Django等web框架会自己附带一个wsgi服务器(这就是Django应用可以直接启动的原因),但是这只是在开发阶段用到的,在生产环境是不够用的,所以用到性能高的uwsgi。
Web部署后的实际生产环境中,uWSGI作为中间件,它用到了uwsgi协议(与nginx通信),wsgi协议(调用Django app)。当浏览器发来请求,nginx先做处理(静态资源是nginx的强项),无法处理的请求(uWSGI),最后的相应也是nginx回复给浏览器的。
多了一层反向代理,提高Web server性能(uWSGI处理静态资源不如Nginx,Nginx会在收到一个完整的HTTP请求后再转发给wWSGI),Nginx可以做负载均衡(多个服务器时),保护了实际的web服务器(客户端是和nginx交互而不是uWSGI)
针对日常开发过程中涉及到的WSGI原理及流程进行了学习总结,希望对后续Python Web开发请求过程和解析原理提供借鉴和帮助。
版权声明:本文标题:Python Web开发之WSGI 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686582167a84278.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论