我们都知道Python是一门强大的语言,可以适应大型项目的快速原型制作和生产,因此在web应用程序的开发中得到了广泛的应用。面试的时候,大家或多或少都被问过这样一个问题:一个请求从浏览器到返回数据要经过什么过程?要回答这个问题首先需要对HTTP协议、web框架、服务器等底层知识有一定的储备,同时需要对web框架与服务器的关系有一定的了解.这是一张详细显示它们之间关系的图片。这么多wsgi是不是有点眼花缭乱?看不懂也没关系,我会带你按照图中的顺序一步步理解里面的概念,理清它们之间的关系。1、PythonFrameworks中的web框架有很多,常见的有Django、Flask、Tornado、sanic等,有些人可能对sanic不是很熟悉。这里多说几句,它的用法和Flask很像,但是支持async/await异步并发编程,所以相对来说性能更高。我这里就不比较这些框架了,因为这不是我们今天的重点!熟悉的朋友都知道,web框架包括一系列的库和一个主处理器(handler),这样你就可以构建自己的代码来实现web应用程序(比如说一个交互式网站)。大多数Web框架都包含可以实现以下功能的模式和工具:URL路由将传入的HTTP请求匹配到特定的路由函数,并通过路由函数调用相应的Python代码请求和响应对象Python中的大多数Web框架帮助我们对HTTP请求Request进行了封装由用户发送,同时还提供了发送给用户浏览器的Response对象。模板引擎可以将实现应用程序的Python代码逻辑从HTML(或其他)中分离出来以生成输出,例如著名的Jinja2模板引擎。它使用基于文本的模板语言,因此它可用于生成任何类型的标记,而不仅仅是HTML。它允许自定义过滤器、标记、测试和全局变量Web服务开发。除了上述之外,单个Web框架无法支持我们应用程序上的服务。需要在开发机上运行HTTP服务器,以便快速开发;这就需要web框架和服务器之间的通信等问题。好在Python为我们提供了这样的协议接口,也就是我们常说的WSGI协议!让我们来看看WSGI是什么。2.WSGI协议Web服务网关接口(简称“WSGI”)是Web服务器与PythonWeb应用框架之间的标准接口。通过标准化Web服务器和PythonWeb应用程序框架之间的行为和通信,WSGI使编写可移植的PythonWeb代码成为可能,这些代码可以部署在任何符合WSGI的Web服务上。有了WSGI协议,我们就不需要为每个web框架都创建一个协议,因为基本上所有的Pythonweb框架都支持这个协议。3.uWSGI服务器uWSGI服务器就是图中提到的WSGI容器。与传统的web服务器相比,独立的uWSGI服务器使用更少的资源,提供更高的性能。Python中使用最广泛的uWSGI服务器主要有以下几种:GunicornGunicorn(GreenUnicorn,绿色独角兽)是一个纯PythonWSGI服务器,用于支持Python应用。与其他PythonWeb服务器不同,它具有经过深思熟虑的用户界面,非常易于使用和配置。Gunicorn有一个合理的默认配置。然而,其他一些服务器,如uWSGI,相对而言可定制性太强,因此更难以有效使用。Gunicorn是当今新PythonWeb应用程序的推荐选择。WaitressWaitress是一个纯Python的WSGI服务器,号称拥有“非常高效的性能”。它没有很好的文档记录,但它确实提供了Gunicorn没有的一些不错的功能(例如HTTP请求缓冲)。Waitress在PythonWeb开发社区中越来越受欢迎。你没看错uWSGI,又是uWSGI!uWSGI用于构建全栈托管服务。除了进程管理、进程监控等特性,uWSGI还可以作为多种编程语言和协议的应用服务器——包括Python和WSIG。
