网络-flask lab2

1.31

应用程序 中间块 服务器

Flask Nginx uWSGI

大块的内容上一块已经讲了,再补充一点细节。

  1. WSGI, uWSGI, uwsgi 的区别 uWSGI包括:1. uwsgi协议 2. web server 内置支持协议模块 3. application 服务器协议支持模块 4. 进程控制程序。uWSGI是由C语言写的,性能较高。 uwsgi 也是一种协议,uWSGI 实现了 uwsgi、WSGI、http 等协议. uwsgi 是 uWSGI 使用的一个自有的协议,它用4个字节来定义传输数据类型描述。尽管都是协议,uwsgi 和 WSGI 并没有联系,我们需要区分这两个词。
  2. uWSGI 和 Nginx 的关系 Nginx 是高效的 Web 服务器和反向代理服务器,可以用作负载均衡(当有 n 个用户访问服务器时,可以实现分流,分担服务器的压力),与 Apache 相比,Nginx 支持高并发,可以支持百万级的 TCP 连接,十万级别的并发连接,部署简单,内存消耗少,成本低,但 Nginx 的模块没有 Apache 丰富。Nginx 支持 uWSGI 的 uwsgi 协议,因此我们可以将 Nginx 与 uWSGI 结合起来。

    uWSGI可以起到web服务器的作用, 那么为什么需要Nginx呢? 最普遍的说法是 Nginx 对于处理静态文件更有优势,性能更好。其实如果是小网站,没有静态文件需要处理,只用 uWSGI 也是可以的。 但是在有以下情况时最好使用Nginx:

  3. 服务器被某个IP攻击时,Nginx只需要将其加入黑名单既可,如果只有uWSGI,就需要修改代码。
  4. Nginx的特点是负载均衡HTTP缓存。如果不知一台服务器,那么基本Nginx就是必选项。
  5. 如果服务器主机上运行了PHP,Python多个语言写的多个应用,需要Nginx进行转发。

Flask创建一个简单的web应用程序对象

from flask import Flask
app = Flask(__name__)

@app.route('/hello')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

对web框架的使用者来说,不需要关注如何处理HTTP请求,只需要实现业务逻辑既可

reference

  1. PEP 3333 - Python Web服务器网关接口v1.0.1
  2. 写给新手看的Flask+uwsgi+Nginx+Ubuntu部署教程
Table of Contents