网络-flask lab2
1.31
应用程序 中间块 服务器
- 对于传统的客户端(浏览器)-服务器架构,处理请求过程:
- 客户端向服务器发送HTTP请求
- 服务器接受并处理请求
- 并给客户端返回响应。 nginx算是服务器
- 新型的web架构
- web应用程序块: web应用程序:对web服务器接收到的数据进行处理 web框架:方便开发web应用程序(Flask,Django)
- web中间件:最早出现的是CGI(Common Gateway Interface)。后来出现了WSGI,Web Server Gateway Interface,Python定义出来的服务器和应用程序之间的简单接口。Servlet,Java定义出来的简单接口。 ^Flask 依赖的 Werkzeug 就是一个 WSGI 工具包,官方文档的定义是 Werkzeug 是为 Python 设计的 HTTP和 WSGI 实用程序库。我们需要注意的是,Flask 自带的 Werkzeug 是用来开发的,并不能用于生产环境,Flask 是 Web 框架,而 Werkzeug 不是 Web框架,不是 Web 服务器,只是一个 WSGI 工具包,它在 Flask 的作用是作为 Web 框架的底层库,它方便了我们的开发。^
- web服务器:最常见的web服务器有,Nginx、Apache,但是这些web服务器没有内置的WSGI实现,需要通过扩展完成。如 Apache,通过扩展模块 mod_wsgi 来支持WSGI,Nginx可以通过代理的方式,将请求封装好,交给应用服务器,比如 uWSGI。 需要注意的是:uWSGI也可以作为服务器端使用,uWSGI 是一个全站式的托管服务,它实现了应用服务器(支持多种编程语言)、代理、进程管理器、监视器。
Flask Nginx uWSGI
大块的内容上一块已经讲了,再补充一点细节。
- WSGI, uWSGI, uwsgi 的区别 uWSGI包括:1. uwsgi协议 2. web server 内置支持协议模块 3. application 服务器协议支持模块 4. 进程控制程序。uWSGI是由C语言写的,性能较高。 uwsgi 也是一种协议,uWSGI 实现了 uwsgi、WSGI、http 等协议. uwsgi 是 uWSGI 使用的一个自有的协议,它用4个字节来定义传输数据类型描述。尽管都是协议,uwsgi 和 WSGI 并没有联系,我们需要区分这两个词。
- uWSGI 和 Nginx 的关系 Nginx 是高效的 Web 服务器和反向代理服务器,可以用作负载均衡(当有 n 个用户访问服务器时,可以实现分流,分担服务器的压力),与 Apache 相比,Nginx 支持高并发,可以支持百万级的 TCP 连接,十万级别的并发连接,部署简单,内存消耗少,成本低,但 Nginx 的模块没有 Apache 丰富。Nginx 支持 uWSGI 的 uwsgi 协议,因此我们可以将 Nginx 与 uWSGI 结合起来。
uWSGI可以起到web服务器的作用, 那么为什么需要Nginx呢? 最普遍的说法是 Nginx 对于处理静态文件更有优势,性能更好。其实如果是小网站,没有静态文件需要处理,只用 uWSGI 也是可以的。 但是在有以下情况时最好使用Nginx:
- 服务器被某个IP攻击时,Nginx只需要将其加入黑名单既可,如果只有uWSGI,就需要修改代码。
- Nginx的特点是负载均衡和HTTP缓存。如果不知一台服务器,那么基本Nginx就是必选项。
- 如果服务器主机上运行了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请求,只需要实现业务逻辑既可