快捷搜索:  www.ymwears.cn  as  xxx  test  1.ymwears.cn  xxx AND 67=67  xxx ORDER BY 1#

网关协议基础知识你都掌握了没

CGI

CGI即通用网关接口(Common Gateway Interface),是外部利用法度榜样(CGI法度榜样)与Web办事器之间的接口标准,是在CGI法度榜样和Web办事器之间通报信息的规程。CGI规范容许Web办事器履行外部法度榜样,并将它们的输启程送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完备的新的交互式媒体。普通的讲CGI就像是一座桥,把网页和WEB办事器中的履行法度榜样连接起来,它把HTML接管的指令通报给办事器的履行法度榜样,再把办事器履行法度榜样的结果返还给HTML页。CGI 的跨平台机能极佳,险些可以在任何操作系统上实现。

CGI要领在碰到连接哀求(用户哀求)先要创建cgi的子进程,激活一个CGI进程,然后处置惩罚哀求,处置惩罚完后停止这个子进程。这便是fork-and-execute模式。以是用cgi要领的办事器有若干连接哀求就会有若干cgi子进程,子进程反复加载是cgi机能低下的主要缘故原由。当用户哀求数量异常多时,会大年夜量挤占系统的资本如内存,CPU光阴等,造成效能低下。

CGI脚本事情流程:

● 浏览器经由过程HTML表单或超链接哀求指向一个CGI利用法度榜样的URL。

● 办事器收发到哀求。

● 办事器履行所指定的CGI利用法度榜样。

● CGI利用法度榜样履行所必要的操作,平日是基于浏览者输入的内容。

● CGI利用法度榜样把结果款式化为收集办事器和浏览器能够理解的文档(平日是HTML网页)。

● 收集办事器把结果返回到浏览器中。

FastCGI

FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本说话间通信的接口。多半盛行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本说话所支持,此中就有PHP。

FastCGI是从CGI成长改进而来的。传统CGI接口要领的主要毛病是机能很差,由于每次HTTP办事器碰到动态法度榜样时都必要从新启动脚本解析器来履行解析,然后结果被返回给HTTP办事器。这在处置惩罚高并发造访时,险些是弗成用的。FastCGI像是一个常驻(long-live)型的CGI,它可以不停履行着,只要激活后,不会每次都要花费光阴去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。CGI 便是所谓的短生计期利用法度榜样,FastCGI 便是所谓的永生计期利用法度榜样。因为 FastCGI 法度榜样并不必要赓续的孕育发生新进程,可以大年夜大年夜低落办事器的压力并且孕育发生较高的利用效率。它的速率效率起码要比CGI 技巧前进 5 倍以上。它还支持散播式的运算, 即 FastCGI 法度榜样可以在网站办事器以外的主机上履行并且吸收来自其它网站办事器来的哀求。

FastCGI是说话无关的、可伸缩架构的CGI开放扩展,其主要行径是将CGI说冥器进程维持在内存中并是以得到较高的机能。众所周知,CGI说冥器的反复加载是CGI机能低下的主要缘故原由,假如CGI说冥器维持在内存中并吸收FastCGI进程治理器调整,则可以供给优越的机能、伸缩性、Fail-Over特点等等。FastCGI接口要领采纳C/S布局,可以将HTTP办事器和脚本解析办事器分开,同时在脚本解析办事器上启动一个或者多个脚本解析守护进程。当HTTP办事器每次碰到动态法度榜样时,可以将其直接交付给FastCGI进程来履行,然后将获得的结果返回给浏览器。这种要领可以让HTTP办事器埋头地处置惩罚静态哀求或者将动态脚本办事器的结果返回给客户端,这在很大年夜程度上前进了全部利用系统的机能。

FastCGI的事情流程:

● Web Server启动时载入FastCGI进程治理器(PHP-CGI或者PHP-FPM或者spawn-cgi)

● FastCGI进程治理器自身初始化,启动多个CGI说冥器进程(可见多个php-cgi)并等待来自Web Server的连接。

● 当客户端哀求到达Web Server时,FastCGI进程治理器选择并连接到一个CGI说冥器。Web server将CGI情况变量和标准输入发送到FastCGI子进程php-cgi。

● FastCGI子进程完成处置惩罚后将标准输出和差错信息从同连续接返回Web Server。当FastCGI子进程关闭连接时,哀求便告处置惩罚完成。FastCGI子进程接着等待并处置惩罚来自FastCGI进程治理器(运行在Web Server中)的下一个连接。在CGI模式中,php-cgi在此便退出。

FastCGI 的特征

突破传统页面处置惩罚技巧。传统的页面处置惩罚技巧,法度榜样必须与 Web 办事器或 Application 办事器处于同一台办事器中。这种历史已经早N年被FastCGI技巧所突破,FastCGI技巧的利用法度榜样可以被安装在办事器群中的任何一台办事器,而经由过程 TCP/IP协议与 Web 办事器通讯,这样做既得当开拓大年夜型散播式 Web 群,也得当高效数据库节制。

明确的哀求模式。CGI 技巧没有一个明确的角色,在 FastCGI 法度榜样中,法度榜样被付与明确的角色(相应器角色、认证器角色、过滤器角色)。

ISAPI

ISAPI(Internet Server ApplicaTIon Program Interface)是微软供给的一套面向WEB办事的API接口,它能实现CGI供给的整个功能,并在此根基长进行了扩展,如供给了过滤器利用法度榜样接口。ISAPI利用大年夜多半以DLL动态库的形式应用,可以在被用户哀求后履行,在处置惩罚完一个用户哀求后不会顿时消掉,而是继承驻留在内存中等待处置惩罚其余用户输入。此外,ISAPI的DLL利用法度榜样和WEB办事器处于同一个进程中,效率要显明高于CGI。(因为微软的排他性,只能运行于windows情况)

ISAPI办事器扩展为应用 Internet 办事器的通用网关接口(CGI) 利用法度榜样供给了另一种选择。与 CGI 利用法度榜样不合,ISA 在 HTTP办事器所在的同一地址空间运行,并且可以造访可由 HTTP 办事器应用的所有资本。ISA 的系统开销比 CGI 利用法度榜样低,由于它们不要求创建其他进程,也不履行必要超出进程界限的通信,而这种通信异常耗时。假如内存被其他进程所必要,扩展和筛选器DLL 都可能被卸载。ISAPI 容许在一个 DLL 中有多个敕令,这些敕令作为 DLL 中CHttpServer工具的成员函数来实现。CGI 要求每个义务有一个零丁的名称和一个到零丁的可履行文件的 URL 映射。每个新的 CGI 哀求启动一个新进程,而每个不合的哀求包孕在各自的可履行文件中,这些文件根据每个哀求加载和卸载,是以系统开销高于 ISA。

PHP-CGI

PHP-CGI是PHP自带的FastCGI治理器。PHP-CGI的不够:

● php-cgi变化php.ini设置设置设备摆设摆设后需重启php-cgi才能让新的php-ini生效,弗成以平滑重启

● 直接杀逝世php-cgi进程php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑重新天生新的子进程。)

Spawn-FCGI

Spawn-FCGI是一个通用的FastCGI治理办事器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的治理事情,不过有不少毛病。而PHP-FPM的呈现若干缓解了一些问题,但PHP-FPM有个毛病便是要从新编译,这对付一些已经运行的情况可能有不小的风险),在php 5.3.3中可以直接应用PHP-FPM了。Spawn-FCGI的代码很少,整个才630行,用c说话编写,近来一次提交是5年前。代码主页:https://github.com/lighttpd/spawn-fcgi

Spawn-FCGI代码阐发如下:

spawn-fcgi 首先create socket,bind,listen 3步创建办事器socket,(把这个socket叫做 fcgi_fd)

用dup2,把fcgi_fd 互换给 FCGI_LISTENSOCK_FILENO (FCGI_LISTENSOCK_FILENO数值上即是0,这是fastcgi协议傍边指定用来listen的socket id)

● 履行execl ,replaces the current process image with a new process image. process image 进程在运行空间的代码段

很显然,Spawn-FCGI也是 pre-fork 模型,只是用了上古C说话编写,充溢了N多unix下暗黑编程技术。

Spawn-FCGI功能很单一:

● 尽管fork进程,子进程挂了,主进程仅仅log记录一次,根本不会从新fork。在2009年一段光阴内,我曾经用spawn-fcgi支配php-cgi,当跑一段光阴就会全挂掉落,只能用crontab准时重启spawn-fcgi

● 不认真子进程中的收集IO,把socket放到指定位置就完了,接下来的事理由被spawn的法度榜样处置惩罚

Spawn-FCGI是一个很早期的法度榜样,瞻仰一下即可。别的有:1996年的一段代码:http://www.fastcgi.com/om_archive/kit/cgi-fcgi/cgi-fcgi.c,和spawn-fcgi一个风格

PHP-FPM

PHP-FPM是一个PHP FastCGI治理器,是只用于PHP的,可以在 http://php-fpm.org/download下载获得。PHP-FPM着实是PHP源代码的一个补丁,旨在将FastCGI进程治理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以应用。FPM(FastCGI 进程治理器)用于调换 PHP-CGI 的大年夜部分附加功能,对付高负载网站是异常有用的。它的功能包括:

● 支持平滑竣事/启动的高档进程治理功能;

● 可以事情于不合的 uid/gid/chroot 情况下,并监听不合的端口和应用不合的 php.ini 设置设置设备摆设摆设文件(可取代 safe_mode 的设置);

● stdout 和 stderr 日志记录;

● 在发生意外环境的时刻能够从新启动并缓存被破坏的 opcode;

● 文件上传优化支持;

● “慢日志” - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以应用 ptrace或者类似对象读取和阐发远程进程的运行数据)运行所导致的非常迟钝;

● fastcgi_finish_request() - 特殊功能:用于在哀求完成和刷新数据后,继承在后台履行耗时的事情(录入视频转换、统计处置惩罚等);

● 动态/静态子进程孕育发生;

● 基础 SAPI 运行状态信息(类似Apache的 mod_status);

● 基于 php.ini 的设置设置设备摆设摆设文件。

WSGI

Web办事器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python说话定义的Web办事器和Web利用法度榜样或框架之间的一种简单而通用的接口。自从WSGI被开拓出来今后,许多其它说话中也呈现了类似接口。WSGI是作为Web办事器与Web利用法度榜样或利用框架之间的一种初级其余接口,以提升可移植Web利用开拓的合营点。WSGI是基于现存的CGI标准而设计的。

WSGI区分为两个部份:一为“办事器”或“网关”,另一为“利用法度榜样”或“利用框架”。在处置惩罚一个WSGI哀求时,办事器会为利用法度榜样供给情况资讯及一个回呼函数(Callback FuncTIon)。当利用法度榜样完成处置惩罚哀求后,透过前述的回呼函数,将结果回传给办事器。所谓的 WSGI 中心件同时实现了API的两方,是以可以在WSGI办事和WSGI利用之间起调停感化:从WSGI办事器的角度来说,中心件扮演利用法度榜样,而从利用法度榜样的角度来说,中心件扮演办事器。“中心件”组件可以履行以下功能:

● 重写情况变量后,根据目标URL,将哀求消息路由到不合的利用工具。

● 容许在一个进程中同时运行多个利用法度榜样或利用框架。

● 负载均衡和远程处置惩罚,经由过程在收集上转发哀乞降相应消息。

● 进行内容后处置惩罚,例如利用XSLT样式表。

曩昔,若何选择相宜的Web利用法度榜样框架成为困扰Python初学者的一个问题,这是由于,一样平常而言,Web利用框架的选择将限定可用的Web办事器的选择,反之亦然。那时的Python利用法度榜样平日是为CGI,FastCGI,mod_python中的一个而设计,以致是为特定Web办事器的自定义的API接口而设计的。WSGI没有官方的实现, 由于WSGI更像一个协议。只要遵循这些协议,WSGI利用(ApplicaTIon)都可以在任何办事器(Server)上运行, 反之亦然。WSGI便是Python的CGI包装,相对付Fastcgi是PHP的CGI包装。

WSGI将 web 组件分为三类: web办事器,web中心件,web利用法度榜样, wsgi基础处置惩罚模式为 : WSGI Server -》 (WSGI Middleware)* -》 WSGI ApplicaTIon 。

1、WSGI Server/gateway

wsgi server可以理解为一个相符wsgi规范的web server,接管request哀求,封装一系列情况变量,按照wsgi规范调用注册的wsgi app,着末将response返回给客户端。翰墨很难解释清楚wsgi server到底是什么器械,以及做些什么工作,最直不雅的要领照样看wsgi server的实今世码。以python自带的wsgiref为例,wsgiref是按照wsgi规范实现的一个简单wsgi server。它的代码也不繁杂。

● 办事器创建socket,监听端口,等待客户端连接。

● 当有哀求来时,办事器解析客户端信息放到情况变量environ中,并调用绑定的handler来处置惩罚哀求。

● handler解析这个http哀求,将哀求信息例如method,path等放到environ中。

● wsgi handler再将一些办事器端信息也放到environ中,着末办事器信息,客户端信息,本次哀求信息整个都保存到了情况变量environ中。

● wsgi handler 调用注册的wsgi app,并将environ和回调函数传给wsgi app

● wsgi app 将reponse header/status/body 回传给wsgi handler

● 终极handler照样经由过程socket将response信息塞回给客户端。

2、WSGI Application

wsgi application便是一个通俗的callable工具,当有哀求到来时,wsgi server会调用这个wsgi app。这个工具接管两个参数,平日为environ,start_response。environ就像前面先容的,可以理解为情况变量,跟一次哀求相关的所有信息都保存在了这个情况变量中,包括办事器信息,客户端信息,哀求信息。start_response是一个callback函数,wsgi application经由过程调用start_response,将response headers/status 返回给wsgi server。此外这个wsgi app会return 一个iterator工具,这个iterator便是response body。这么空讲感到很虚,对着下面这个简单的例子看就明白很多了。

3、WSGI MiddleWare

有些功能可能介于办事器法度榜样和利用法度榜样之间,例如,办事器拿到了客户端哀求的URL, 不合的URL必要交由不合的函数处置惩罚,这个功能叫做 URL Routing,这个功能就可以放在二者中心实现,这其中心层便是 middleware。middleware对办事器法度榜样和利用是透明的,也便是说,办事器法度榜样以为它便是利用法度榜样,而利用法度榜样以为它便是办事器。这就奉告我们,middleware必要把自己冒充成一个办事器,吸收利用法度榜样,调用它,同时middleware还必要把自己冒充成一个利用法度榜样,传给办事器法度榜样。

着实无论是办事器法度榜样,middleware 照样利用法度榜样,都在办事端,为客户端供给办事,之以是把他们抽象成不合层,便是为了节制繁杂度,使得每一次都不太繁杂,各司其职。

uWCGI

uWSGI 项目旨在为支配散播式集群的收集利用开拓一套完备的办理规划。uWSGI主要面向web及其标准办事,已经成功的利用于多种不合的说话。因为uWSGI的可扩展架构,它能够被无限定的扩展用来支持更多的平台和说话。今朝,你可以应用C,C++和Objective-C来编写插件。项目名称中的“WSGI”是为了向同名的Python Web标准表示谢谢,由于WSGI为该项目开拓了第一个插件。uWSGI是一个Web办事器,它实现了WSGI协议、uwsgi、http等协议。uWSGI,既不用wsgi协议也不用FastCGI协议,而是自创了一个uwsgi的协议,uwsgi协议是一个uWSGI办事器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI比拟是两样器械。听说该协议大年夜约是fcgi协议的10倍那么快。

uWSGI的主要特征如下:

● 超快的机能。

● 低内存占用(实测为apache2的mod_wsgi的一半阁下)。

● 多app治理。

● 详尽的日志功能(可以用来阐发app机能和瓶颈)。

● 高度可定制(内存大年夜小限定,办事必然次数后重启等)。

责任编辑:ct

您可能还会对下面的文章感兴趣: