南京网站如何制作,电暖怎么做网站,wordpress 模板带数据库,关于公司做网站供比价报告uWSGI 是一个快速的、纯C语言开发的、自维护的、对开发者友好的 WSGI 服务器#xff0c;旨在提供专业的 Python web应用发布和开发。可使用 C/C/Objective-C 来为 uWSGI 编写插件。在这里要区分三个概念#xff1a;
WSGI#xff1a;全称是Web Server Gateway Interface旨在提供专业的 Python web应用发布和开发。可使用 C/C/Objective-C 来为 uWSGI 编写插件。在这里要区分三个概念
WSGI全称是Web Server Gateway InterfaceWSGI不是服务器、python模块、框架、API或者任何软件只是一种规范描述web server如何与web application通信的规范。server和application的规范在PEP 3333中有具体描述。要实现WSGI协议必须同时实现web server和web application当前运行在WSGI协议之上的web框架有Bottle,Flask,Django。uwsgi与WSGI一样是一种通信协议是uWSGI服务器的独占协议用于定义传输信息的类型(type of information)每一个uwsgi packet前4byte为传输信息类型的描述与WSGI协议是两种东西据说该协议是fcgi协议的10倍快。uWSGI是一个web服务器实现了WSGI协议、uwsgi协议、http协议等。
1. WSGI协议
WSGI协议主要包括server和application两部分
WSGI server负责从客户端接收请求将request转发给application将application返回的response返回给客户端WSGI application接收由server转发的request处理请求并将处理结果返回给server。application中可以包括多个栈式的中间件(middlewares)这些中间件需要同时实现server与application因此可以在WSGI服务器与WSGI应用之间起调节作用对服务器来说中间件扮演应用程序对应用程序来说中间件扮演服务器。 WSGI协议其实是定义了一种server与application解耦的规范即可以有多个实现WSGI server的服务器也可以有多个实现WSGI application的框架那么就可以选择任意的server和application组合实现自己的web应用。例如uWSGI和Gunicorn都是实现了WSGI server协议的服务器DjangoFlask是实现了WSGI application协议的web框架可以根据项目实际情况搭配使用。 图1 wsgi协议
WSGI 规定每个 python 程序Application必须是一个可调用的对象函数或者是实现了__call__方法的类接受两个参数 environWSGI 的环境信息 和 start_response开始响应请求的函数并且返回 iterable。几点说明
environ 和 start_response 由 http server 提供并实现environ 变量是包含了环境信息的字典Application 内部在返回前调用 start_responsestart_response也是一个 callable接受两个必须的参数statusHTTP状态和 response_headers响应消息的头可调用对象要返回一个值这个值是可迭代的。
下面是wsgi一个具体实现
应用程序
#!/usr/bin/env python
# coding:utf-8
def application(environ,start_response):start_response(200 ok,[(ContentType,text/html)])return [bh1hello world/h1]
服务器
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from app import application
# 创建一个服务器IP地址为空端口是8000处理函数是application:
httpd make_server(, 8000, application)
print(Serving HTTP on port 8000...)
# 开始监听HTTP请求:
httpd.serve_forever()
可以看出application的流程包括:
接收http服务器发送过来的用户请求信息environ处理请求调用get_response()方法处理当前请求。调用由server传入的start_response()方法将响应header与status返回给server。返回响应正文
2.uWSGI
uWSGI旨在为部署分布式集群的网络应用开发一套完整的解决方案。主要面向web及其标准服务。由于其可扩展性能够被无限制的扩展用来支持更多平台和语言。uWSGI是一个web应用服务器实现了WSGI协议uwsgi协议http协议等。 uWSGI的主要特点是
超快的性能低内存占用多app管理详尽的日志功能可以用来分析app的性能和瓶颈高度可定制内存大小限制服务一定次数后重启等
uWSGI服务器自己实现了基于uwsgi协议的server部分我们只需要在uwsgi的配置文件中指定application的地址uWSGI就能直接和应用框架中的WSGI application通信。
3 nginxuWsgi实现站点的部署
uWSGI做为一款优秀的python应用服务器更擅长处理动态请求实际开发中一般用nginx处理静态请求动态请求转发给uWsgi服务器处理。其架构如图1所示。 nginx作为web服务器有以下特点
它处理静态文件和索引文件效果非常高配合uWSGI服务器会更加安全它的设计非常注重效率最大支持 5 万个并发连接但只占用很少的内存空间稳定性高配置简洁强大的反向代理和负载均衡功能平衡集群中各个服务器的负载压力应用
而uWsgi服务器虽然也能够处理静态请求但效率远不如nginx并且从安全性和可扩展性方面来讲使用nginxuWsgi是最佳方式。所以一般python后端开发一般采取nginxuWsgiDjango/Flask应用的方式部署。
一般首先是浏览器发起 http 请求到 nginx 服务器Nginx 根据接收到请求包进行 url 分析判断访问的资源类型如果是静态资源直接读取静态资源返回给浏览器。如果请求的是动态资源就转交给 uwsgi服务器uwsgi 服务器根据自身的 uwsgi 和 WSGI 协议找到对应的 Django 框架/Flask框架Django 框架/Flask框架下的应用进行逻辑处理后将返回值发送到 uwsgi 服务器然后 uwsgi 服务器再返回给 nginx最后 nginx将返回值返回给浏览器进行渲染显示给用户。