zoukankan      html  css  js  c++  java
  • WSGI

    WSGI

    什么是WSGI?

    wsgi 是一个 web 组件的接口规范(WSGI is the Web Server Gateway Interface. It is a specification that describes how a web server communicates with web applications, and how web applications can be chained together to process one request.),wsgi将 web 组件分为三类: web服务器,(web中间件),web应用程序

    wsgi server

    基本工作流程
    1. 服务器创建socket,监听端口,等待客户端连接。
    2. 当有请求来时,服务器解析客户端信息放到环境变量environ中,并调用绑定的handler来处理请求。
    3. handler解析这个http请求,将请求信息例如method,path等放到environ中。
    4. wsgi handler再将一些服务器端信息也放到environ中,最后服务器信息,客户端信息,本次请求信息全部都保存到了环境变量environ中。
    5. wsgi handler 调用注册的wsgi app,并将environ和回调函数传给wsgi app
    6. wsgi app 将reponse header/status/body 回传给wsgi handler
    7. 最终handler还是通过socket将response信息塞回给客户端

    wsgi application

    wsgi application就是一个普通的可调用的对象,当有请求到来时,wsgi server会调用这个wsgi app。这个对象接收两个参数,通常为environ,start_response。environ就像前面介绍的,可以理解为环境变量,跟一次请求相关的所有信息都保存在了这个环境变量中,包括服务器信息,客户端信息,请求信息。start_response是一个callback函数,wsgi application通过调用start_response,将response headers/status 返回给wsgi server。此外这个wsgi app会return 一个iterator对象 ,这个iterator就是response body。

    WSGI规定:

    1. 应用程序需要是一个可调用的对象

    可以是函数
    可以是一个实例,它的类实现了__call__方法
    可以是一个类,这时候,用这个类生成实例的过程就相当于调用这个类

    2. 可调用对象接收两个参数
    这样,如果这个对象是函数的话,它看起来要是这个样子:

    # callable function
    def application(environ, start_response):
        pass


    如果这个对象是一个类的话,它看起来是这个样子:

    # callable class
    class Application:
        def __init__(self, environ, start_response):
            pass    


    如果这个对象是一个类的实例,那么,这个类看起来是这个样子:

    # callable object
    class ApplicationObj:
        def __call__(self, environ, start_response):
            pass

    3.可调用对象要返回一个值,这个值是可迭代的。

    Django中的wsgi

    https://www.jianshu.com/p/679dee0a4193

  • 相关阅读:
    python常见异常
    python+selenium动态抓取网页数据
    python基于scrapy配置日志
    Python依赖
    nginx配置详解
    Centos 用户登录失败N次后锁定用户禁止登陆
    CENTOS 7 firewalld详解,添加删除策略
    Centos7搭建Zookeeper 3.4.14集群
    Centos7安装FastDFS整合nginx
    VMware VCSA 6.7配置vSAN存储
  • 原文地址:https://www.cnblogs.com/ycg-blog/p/12147460.html
Copyright © 2011-2022 走看看