Flask+uWSGI+Nginx模型

作者: 豆志昂扬 | 来源:发表于2019-03-17 22:58 被阅读2次

    Web服务器层

    Web服务器主要是接收 HTTP 请求并返回响应。常见的 web服务器有 Nginx,Apache,IIS等。在上图1的三层结构中,web服务器是最先接收用户请求的,并将响应结果最终返回给用户。

    WSGI层

    WSGI 是一种规范/协议,其全称为 the Python Web Server Gateway Interface,定义了 web服务器和 web应用之间的接口规范。

    下面的代码展示了 web服务器是如何与 web应用组合在一起的

    def application(env, start_response):    
          start_response('200 OK', [('Content-Type', 'text/html')])    
          return [b"Hello World"]
    

    上述代码就是一个完整的 WSGI 应用,当一个支持 WSGI 的 web服务器接收到客户端的请求后,便会调用这个 application 方法。WSGI 层并不需要关心 env, start_response 这两个变量是如何实现的。

    值得指出的是,WSGI 是一种协议,需要区分几个相近的名词:

    • uwsgi:是uWSGI服务器的独占通信协议,用于定义传输信息的类型。其与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。

    • uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

    Web框架层

    Web框架的作用主要是方便我们开发 web应用程序,HTTP请求的动态数据就是由 web框架层来提供的。常见的 web框架有Flask,Django等。

    我们以 Flask 框架为例子,展示 web框架的作用:

    from flask import Flask
    app = Flask(__name__)
    @app.route('/hello')
    def hello_world():
        return 'Hello World!'
    if __name__ == '__main__':
        app.run(port=5000)
    

    以上简单的几行代码,就创建了一个 web应用程序对象 app。 app 监听机器所有 ip 的 8080 端口,接受用户的请求连接。

    对于 web框架的使用者来说,只需要关心如何实现业务的逻辑即可,他们并不关心如何接收 HTTP 请求,也不关心如何将请求路由到具体方法处理并将响应结果返回给用户。

    Nginx,uWSGI,Flask 之间的对话

    1. Nginx:Hey,uWSGI,我刚收到了一个请求,我需要你作些准备,然后由Flask来处理这个请求。

    2. uWSGI:OK,Nginx。我会设置好环境变量,然后将这个请求传递给Flask处理。

    3. Flask:Thanks uWSGI!给我一些时间,我将会把请求的响应返回给你。

    4. uWSGI:Flask,那我等你。

    5. Flask:Okay,我完成了,这里是请求的响应结果,请求把结果传递给Nginx。

    6. uWSGI:Good job!Nginx,这里是响应结果,已经按照要求给你传递回来了。

    7. Nginx:Cool,我收到了,我把响应结果返回给客户端。

    更多

    获取更多内容请关注微信公众号豆志昂扬:

    • 直接添加公众号豆志昂扬
    • 微信扫描下图二维码;

    相关文章

      网友评论

        本文标题:Flask+uWSGI+Nginx模型

        本文链接:https://www.haomeiwen.com/subject/bpnpmqtx.html