Web 服务基础概念
如果需要跑起一个普通的 Web 服务(网站、接口服务), 一般需要有一台主机(云主机等),然后在主机上启动 Web 应用程序。
在 Python 中,大部分 Web 框架(Django、Flask等)自带的 Web 服务器性能较差,不适合在生产环境投入使用,这个问题的解决方案较多,目前使用较多的是使用专业的 HTTP 服务器(软件,如:Nginx、Apache、IIS等) 提供 Web 服务,用 服务器网关接口(WSGI)服务器 作为 HTTP 服务器和 Web 应用程序或框架之间的接口,构成一个完整的 Web 服务。
什么是 Web 应用程序?
一个 Web 应用程序是由完成特定任务的各种 Web 组件构成,并通过 Web 将服务展示给外界。在实际应用中,Web 应用程序是由多个 Servlet、JSP 页面、HTML 文件以及图像文件等组成。所有这些组件相互协调为用户提供一组完整的服务。
什么是 HTTP 服务器?
HTTP 服务器通常也叫 Web 服务器……(???黑人问号脸???)
它通过 HTTP 协议处理 Web 请求(接收和管理)。
什么是 WSGI 服务器?
WSGI(Python Web Server Gateway Interface)基于 CGI(Common Gateway Interface) 标准设计,是为 Python 定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口(其他语言在这之后也出现类似的接口)。WSGI 服务器是基于 WSGI 协议实现的用来调用 Web 应用程序的服务器,另外,它也可以接收来自 HTTP 服务器的实现 WSGI 接口的请求数据,完美对接了 Web 应用程序和 HTTP 服务器的请求、数据交互。
WSGI 的优缺点
优点
- 部署多样化
- 组件间高度解耦(任何一个符合 WSGI 规范的应用程序都可以部署在任何一个实现了 WSGI 规范的服务器上)
缺点
- 无法处理 WebSocket、HTTP/2 一个 URL 多个请求的模式
继任者 ASGI(异步服务器网关接口)
ASGI(Asynchronous Server Gateway Interface)是 WSGI 的精神继承者,旨在在具有异步功能的 Python Web 服务器,框架和应用程序之间提供标准接口。
ASGI 服务器
主流实现
- Uvicorn
- Daphne
- Hypercorn