WSGI与uWSGI

1. Web 服务器

Web服务器: 用来接受客户端请求,建立连接,转发响应的程序.
Web服务器例如: Nginx, uWSGI等.

2. Web应用框架

Web应用框架: (Web application framework)是一种开发框架, 用来支持动态网站、网络应用程序及网络服务的开发。
Python中Django与flask就是Web框架.
Web应用: Web框架写的程序
运行在WSGI协议之上的Web框架有Django, Flask, Bottle.

3. WSGI

WSGI:(WEB SERVER GATEWAY INTERFACE)Web服务器网关接口, Web服务器与Web应用通信的一种规范.
WSGI协议定义Web服务器与Web应用解耦的规范, 实现程序与服务器之间交互的通用性.

即可以有多个实现WSGI server的服务器, 也可以有多个实现WSGI 的框架, 
只要Web服务器和Web框架满足WSGI协议, 它们就能相互搭配.

WSGI服务器的选择很多, uWSGI  Gunicorn都是实现了WSGI server协议的服务器.
Django, Flask是实现了WSGI application协议的Web框架.

Django, Flask框架都有自己实现的简单的WSGI server服务器, 一般用于服务器调试.
在生产环境下建议用其他WSGI server服务器.

4. uWSGI

uWSGI: 实现了WSGI协议的一个Web服务器. 
实现了WSGI协议, uwsgi, http等协议, 用于接收前端服务器转发的动态请求并处理后发给 Web 应用程序.
实际上,一个uWSGI的Web服务器, 再加上Django这样的Web框架, 就已经可以实现网站的功能了.
uwsgi协议是一个uWSGI服务器自有的协议, 它用于定义传输信息的类型(type of information),
每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西.
uWSGI是使用C编写的, 除了uwsgi协议的Web服务器. 还自带丰富的组件.
其中核心组件包含进程管理、监控、IPC等功能,实现应用服务器接口的请求插件支持多种语言和平台,
比如WSGI、Rack、Lua WSAPI,网管组件实现了负载均衡、代理和理由功能

5. Nginx+uWGSI

uWSGI也可以当做中间件.
   如果是Nginx+uWSGI+App,那uWSGI就是一个中间件
   如果是uWSGI+App,那它就是服务器
apache, Nginx服务器, 没有解析动态语言的功能, 而是分派给其他服务器模块来做
* apache就可以说内置了php模块, 支持php非常爽, 让人感觉好像apache就支持php一样
Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换.
: Django 框架写了一个网站, 现在要将它挂在网上运行.
Nginx做为代理服务器:负责静态资源发送(js、css、图片等)、动态请求转发以及结果的回复.
uWSGI做为后端服务器:负责接收 Nginx 转发的请求并处理后发给 Django 应用
      以及接收 Django 应用返回信息转发给 Nginx.
Django应用: 收到请求后处理数据并渲染相应的返回页面给 uWSGI 服务器.
浏览器 <--HTTP协议--> Nginx <--uWSGI协调--> uWSGI <--WSGI协议--> Django
Django应用, 通过WSGI协议连接uWSGI服务器, uWSGI服务器实现WSGI、http等协议,
通过uwsgi协议和Nginx服务器实现http的动态请求和转发以及结果
有了uWGSI, 为什么还需要Nginx?
一个普通的个人网站, 访问量不大的话, 可以由 uWSGI  Django 构成.
但是一旦访问量过大,客户端请求连接就要进行长时间的等待(Web服务器处理不来)
解决方案: 
   分布式服务器, 可以多准备来几台Web服务器, 处理请求.
   Nginx负责分配客户端的请求连接给Web服务器.
Nginx是一个高性能的HTTP和反向代理服务器.
   正向代理:正向的就是由浏览器主动的向代理服务器发出请求, 经代理服务器做出处理后再转给目标服务器
   反向代理:反向的就是不管浏览器同不同意,请求都会经过代理服务器处理再发给目标服务器

img

使用Nginx作为反向代理服务器的好处:
   安全: 不管什么请求都要经过代理服务器, 可以避免外部程序直接攻击Web服务器
   负载均衡: 根据请求情况和服务器负载情况, 将请求分配给不同的Web服务器, 保证服务器性能
   提高Web服务器的IO性能: 请求从客户端传到Web服务器是需要时间的,传递多长时间就会让这个进程阻塞多长时间,
       而通过反向代理,就可以由反向代理完整接受该请求,然后再传给Web服务器,从而保证服务器性能,
       而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理, 不经过Web服务器
       (动态内容: 转发给uWSGI服务器, 静态文件: 直接返回静态文件)

6. 总结

WSGI是一种通信协议
uwsgi是一种通信协议,常用于在uWSGI服务器与其他网络服务器的数据通信
而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值