cgi fastcgi wsgi

  之前一直是接触java比较多,最近刚接触python,对于cgi、fastcgi和wsgi的概念不是特别清楚。昨天找了一些资料看看了,大概有一些模糊的概念,先把自己理解的给写出看看。

  首先我们要了解,cgi、fastcgi、和wscgi都是一种协议、一种规则,他们不是一种特殊的语言或者工具。

  cgi的技术是比较早的,主要用于动态资源的请求,当用户请求web服务器的时候,web服务器会根据请求的上下文,来启动本地的应用程序,获取应用程序的输出然后返回给客户端。web服务器与cgi的应用程之间的桥梁就是cgi协议,cgi程序的实现可以用任何语言,php、python、ruby等都可以,只要按照这个协议就可以了。

  fastcgi是基于cgi做的改进,由于cgi的技术是采用每个请求都fork一个进程来处理,请求比较多的时候性能低下,这个时候fastcgi出现的目的就是为了改善这种情况。它采用常驻内存的方式,一开加载一个fastcgi的进程管理器,进程管理器中会初始化一些cgi解释器,当有请求过来的时候,就会找出一个空闲的cgi解释器处理请求。应为采用了这种模式,所以web服务器不与cgi直接通讯了,而是采用socket的方式,将数据封装为符合fastcgi一些的数据包,发送给fastcgi响应器。正式由于这种方式,所以fastcgi和web应用服务器采取的分离部署的方式。

  wscgi可以理解为python自己的一套cgi的实现,目的主要是制定一个统一的规范,如果web服务器支持wsgi的协议,那么任何实现了wsgi的协议都可以在这个web服务器中运行。wsgi主要分为3个部分:容器、中间件、应用。容器主要是接收请求,将请求解析封装为wsgi的数据包,通过中间件调用对应的应用程序。这大概就是这3者之间的关系。wsgi的容器目前也只能基于市面上统统的协议来实现,如http、fastcgi、cgi等。

  下面给两张在知乎上看到的图,理解起来可能更方便一点。

原文地址:https://www.cnblogs.com/rubeitang/p/7614778.html