• WSGI,uwsgi和uWSGI区别联系


    WSGI

    全称:Web Server Gateway Interface 翻译过来就是Web服务器网关接口;WSGI是一个规范协议,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。

    在WSGI中定义了两个角色,Web服务器端称为server或者gateway,应用程序端称为application或者framework(因为WSGI的应用程序端的规范一般都是由具体的框架来实现的)。我们下面统一使用server和application这两个术语。

    server端会先收到用户的请求,然后会根据规范的要求调用application端,如下图所示:

    调用的结果会被封装成HTTP响应后再发送给客户端。

    要使用WSGI,需要分别实现server角色和application角色。

    Application端的实现一般是由Python的各种框架来实现的,比如Django, web.py等,一般开发者不需要关心WSGI的实现,框架会会提供接口让开发者获取HTTP请求的内容以及发送HTTP响应;

    Server端的实现会比较复杂一点,这个主要是因为软件架构的原因。一般常用的Web服务器,如Apache和nginx,都不会内置WSGI的支持,而是通过扩展来完成。比如Apache服务器,会通过扩展模块mod_wsgi来支持WSGI。Apache和mod_wsgi之间通过程序内部接口传递信息,mod_wsgi会实现WSGI的server端、进程管理以及对application的调用。Nginx上一般是用proxy的方式,用nginx的协议将请求封装好,发送给应用服务器,比如uWSGI,应用服务器会实现WSGI的服务端、进程管理以及对application的调用。

    uwsgi

    它是一个二进制协议,可以携带任何类型的数据。一个uwsgi分组的头4个字节描述了这个分组包含的数据类型。

    uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信;

    uWSGI

    uWSGI是一种web服务器,是实现了uwsgi和WSGI两种协议的Web服务器

    WSGI,uwsgi, uWSGI: 实现过程图解

    为什么有了uWSGI为什么还需要nginx?因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。

    要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

    • WSGI是一种通信协议。
    • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
    • 而uWSGI是实现了uwsgi和WSGI等协议的Web服务器

    自下而上的解读

    django

    django作为python语言web开发框架,关心的是如何处理request和response,除此以外,django都不关心,具体怎么部署也不是django要关心的。

    另外,django提供的是一个开发服务器,在开发的时候可以运行起来进行测试,但这使用的是python自带的simple HTTPServer,安全和效率上都不行。

    用django框架开发出来的程序,我们叫做python web应用程序,application,单纯的应用程序还需要其他来实现web的应用,比如WSGI。

    WSGI

    正如前面所提,WSGI是一种协议,不是包也不是server,和tcp一样,属于一种协议,这种协议定义web server和web application如何通信,就相当于在server和application之间架起一座桥。

    这个协议就是专门为python语言定义的,从2003年出来后,其他语言也出现类似接口。

    uWSGI

    有了django框架的python application,有了实现的WSGI协议,要让应用得以部署在服务器,这就需要web server,一般也作为应用服务器。

    uWSGI是一个全功能的HTTP服务器,有关server的配置也很齐全。uWSGI server 把HTTP协议转化成python语言或其他语言支持的网络协议,比如把HTTP协议转化成WSGI协议,供python直接使用。

    uwsgi

    uwsgi是uWSGI的内部自有协议,非通信协议而是线路协议,使用二进制方式和其他应用程序进行通信,常用于uWSGI server和其他web server的数据通信,如nginx/apache等。

    nginx

    nginx作为web server,它也可以实现和uWSGI功能,但是nginx更为强大,比如nginx实现反向代理、负载均衡、转发请求等,这些是uWSGI不能实现的。

  • 相关阅读:
    display:inline、block、inline-block的区别
    JQ里的this与$(this)
    CSS3常用功能的写法
    左右菜单
    php smarty
    网页制作重点记录
    scrapy保存csv文件有空行的解决方案
    scrapy实现多级页面的抓取时使用meta传递item数据的问题(转)
    scrapy抓取拉勾网职位信息(八)——使用scrapyd对爬虫进行部署
    scrapy抓取拉勾网职位信息(七)——实现分布式
  • 原文地址:https://www.cnblogs.com/davis12/p/14583354.html
Copyright © 2020-2023  润新知