zoukankan      html  css  js  c++  java
  • WSGI与uWSGI的应用场景与使用方法

    WSGI  /与/  uWSGI

    在阿里云上部署项目时,在通信中我们都会用到wsgi与uWSGI,这此我就带大家来了解一下wsgi与uWSGI。

    对了,上次有个朋友问我Django的生命周期是什么?我在下一篇博客中给大家讲解一下。

    WSGI

    WSGI是Web Server Gateway Interface的缩写。他是PythonWeb服务器网关接口,

    是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受,

    它已基本达成它的可移植性方面的目标。

    其实我觉得他更像一个协议,他可以运行在任何服务器上WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。

     

      CLIENT:客户端       SERVER:服务器       APPLICATION:应用器

     

              (图片有些模糊,可以放大看)

    从这副图中我们可以看出,应用他必须是一个可调用对象,也可以是一个函数,

    也可以是一个可以实现__call__()的方法,每收到一个请求,APPLICATION(应用器)会调用应用。

    应用在处理完这些数据,准备返回数据的时候,先调用服务传给它的函数,最后再返回可迭代对象作为数据。

    在上图中,黄色到绿色之间有一个environ,他包括了请求的相关信息,

    比如请求方式、请求路径等等,start_response是应用处理完毕后,需要调用的函数,

    用于告诉服务设置响应的头部信息或错误处理等等,他必须是一个字典,

    如::{请求信息:’***’,请求方式:’****’,请求路径:’****’}。

     

    我们先定义一个可调用的函数,它可以使用服务器传给它的请求相关的内容 environ,

     

    然后是服务器:可以在项目文件中找到wsgi_server.py

     

     

    uWSGI ,uWSGI全称(Web Server Gateway Interface

    python安装uWSGI : :  https://www.runoob.com/python3/python-uwsgi.html 

    uWSGI也是一个web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    他不是一个框架,一个软件,或者是API,而只是一种规范描述web server如何与web application通信的规范。

    WSGI协议主要包括serverapplication两部分

    ===========================

    底层内容:有兴趣可以了解一下,没有兴趣勿看

    WSGI server负责从客户端接收请求,将request转发给application,将application返回的response返回给客户端;

    WSGI application接收由server转发的request,处理请求,并将处理结果返回给server。

    application中可以包括多个栈式的中间件(middlewares),这些中间件需要同时实现server与application,

    因此可以在WSGI服务器与WSGI应用之间起调节作用,

    对服务器来说,中间件扮演应用程序,对应用程序来说,中间件扮演服务器

    uWSGI使用通用的API和通用的配置风格来实现应用服务器 (对于各种编程语言和协议),代理,进程管理器和监控器。

     核心 :》 (实现配置、进程管理、socket创建、监控、日志记录、共享内存块、ipc、集群成员和 uWSGI订阅服务器)

    请求插件:》 (为各种语言和平台实现应用服务器接口:WSGI, PSGI, Rack, Lua WSAPI, CGI, PHP, Go ...)

    网关:》 (实现负载均衡器、代理和路由器)

    Emperor :》(实现大量实例管理和监控)

    循环引擎 :》(实现事件和并发,组件可以在reforking, threaded, asynchronous/evented和green thread/coroutine模式下运行。支持多种技术,

    包括uGreen, Greenlet, Stackless, Gevent, Coro::AnyEvent, Tornado, Goroutines和Fibers)

     

    django WSGI application   django项目中可以找到

    WSGI application应该实现为一个可调用对象,例如函数、方法、类(包含`call`方法)。需要接收两个参数:

    • 一个字典,该字典可以包含了客户端请求的信息以及其他信息,

       可以认为是请求上下文,一般叫做environment(编码中多简写为environ、env)

    • 一个用于发送HTTP响应状态(HTTP status )、响应头(HTTP headers)的回调函数

    通过回调函数将响应状态和响应头返回给server,同时返回响应正文(response body),

    响应正文是可迭代的、并包含了多个字符串。

     

    下面是Django中application的具体实现部分:

     

    可以看出application的流程包括:

    1,加载所有中间件,以及执行框架相关的操作,设置当前线程脚本前缀,发送请求开始信号;

    2,处理请求,调用get_response()方法处理当前请求,该方法的的主要逻辑是通过urlconf找到对应的view和callback,

    按顺序执行各种middleware和callback。

    3,调用由server传入的start_response()方法将响应header与status返回给server。

    4,返回响应正文

    下面表示WSGI server服务器处理流程中关键的类和方法。

     

     

  • 相关阅读:
    “用户、组或角色'XXX'在当前数据库中已存在”问题
    C#与Java在继承静态类上的区别
    Java中静态内部类的理解
    python第三天
    python第二天
    python第一天
    applicationhost.config web.config
    IIS:错误: 无法提交配置更改,因为文件已在磁盘上更改
    SMO 的环境
    从客户端中检测到有潜在危险的 Request.Form 值
  • 原文地址:https://www.cnblogs.com/lowbi/p/10820817.html
Copyright © 2011-2022 走看看