首页 » 网站推广 » php网关接口技巧_一篇文章带你看懂各类网关接口GI

php网关接口技巧_一篇文章带你看懂各类网关接口GI

访客 2024-11-04 0

扫一扫用手机浏览

文章目录 [+]

理解网关接口之前,我们须要先弄清楚两个东西,Web做事器和Web运用程序。
什么是Web做事器?什么是Web运用程序?虽然在我的Django小程序课程里面,有对这两者的差异展开来先容,但是这里考虑到很多同学并没有学习这门课,以是我们先把这两个观点弄清楚,否则在后面谈论起网关接口,也只会一知半解。

Web做事器

php网关接口技巧_一篇文章带你看懂各类网关接口GI

首先,什么是Web做事器。
Web做事器是做事于网站后台的一个软件,是常驻于物理做事器的一个打算机程序。
Web做事器可以向浏览器等Web客户端供应文档,也可以放置网站文件,让全天下浏览;可以放置数据文件,让全天下下载。
目前最主流的三个Web做事器是Apache、 Nginx 、IIS。

php网关接口技巧_一篇文章带你看懂各类网关接口GI
(图片来自网络侵删)

Apache是天下利用排名第一的Web做事器软件。
它可以运行在险些所有广泛利用的打算机平台上,由于其跨平台和安全性被广泛利用,是最盛行的Web做事器端软件之一。
它快速、可靠并且可通过大略的API扩充,将Perl/Python等阐明器编译到做事器中。

Nginx是一款轻量级的Web做事器/反向代理做事器及电子邮件(IMAP/POP3)代理做事器,在BSD-like 协议下发行。
其特点是霸占内存少,并发能力强,事实上Nginx的并发能力在同类型的网页做事器中表现较好,中国大陆利用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

这里先大略谈论一下Nginx和Apache的差异,在资源上,Nginx占用的内存更少;在性能上,Nginx的并发能力更强;在社区方面,Nginx和Apache都拥有广泛的利用者,Apache的插件会比Nginx丰富一些。
其余Nginx的功能比Apache要丰富一些,Nginx除了作为Web做事器以外,也常常作为反向代理做事器等利用,而Apache则紧张作为Web做事器去利用。

还有IIS,IIS是微软公司在Windows Server供应的一个Web做事器,一样平常支配在Windows系统上,也有一定的利用者。

Web运用程序

理解了Web做事器,我们接着理解一下Web运用程序。

Web运用程序一样平常指的是完成业务逻辑的程序,比如熟习Python措辞的,常常会用Django、Flask、Tornado等框架来完成业务逻辑的处理,接管要求,返回结果;熟习Java措辞的,则常常会利用Spring、Spring Boot来完成业务逻辑处理;熟习PHP措辞的,则常用ThinkPHP、Laravel、CI等等框架来完成Web后台的开拓;还有Golang、Node.js等等,都会有相应的框架来完成Web要求的处理。

这些便是定义为Web运用程序的东西,也便是我们常说的Web框架,比如一个Pythoner问其余一个Pythoner,你一样平常利用什么Web框架呀?这个便是Web运用程序。

那么Web做事器和Web运用程序有啥差异?其实在前面的描述里面,我已经说的比较清楚了,Web运用程序紧张是完成业务逻辑的处理,Web做事器则紧张是进行外部要求的吸收和转发。
这里须要把稳的是,我们一样平常不应该把业务逻辑放在Web做事器上去处理,虽然说Web做事器支持广泛的脚本来进行拓展,但是我们一样平常情形下还是不应该把业务逻辑放在Web做事器去处理,比如拦截要求、鉴权处理等等的操作。

看到这里可能有些人又会有疑问了,在开拓Web运用的时候,我们直接就可以把运用跑起来接管要求了呀,为啥还须要Web做事器的存在。
比如说利用Django的时候,直接输入命令python manage.py runserver,就可以吸收要求了,为啥还须要Web做事器呢。

这紧张是从性能上去考虑的,Web运用虽然在开拓阶段就可以通过一些命令来启动做事,但是这些功能紧张是供应调试所利用的,真正支配上线的时候,如果流量较大,性能是弗成的,以是须要有Web做事器的存在。
Web做事器是专门用于吸收外部要求并处理的软件,以是Web做事器在性能上会比Web运用更佳,毕竟术业有专攻。
Web做事器处理静态资源要求(CSS、JS、HTML、图片)等,性能会比Web运用更好。
其余对付一些非静态资源的要求,则须要转发到后台Web运用。

到这里,我们基本分清楚Web做事器和Web运用的差异了,这里面我们把稳一个关键词“转发”,当Web做事器接管要求的时候,会把要求转发到后台Web运用去处理,我们本篇文章的主角,GI就事情在这个转发的过程中。

CGI

终于轮到主角“网关接口”。
前面先容了GI事情的地方,接下来我们就来一起磋商一下现在有哪些GI,他们有哪些特点和差异。

首先是CGI,CGI是Common Gateway Interface (通用网关接口)的缩写。
CGI是一项古老的技能。
最初是在1993年由美国国家超级电脑运用中央(NCSA)为NCSA HTTPd Web做事器开拓的。
CGI的事理非常大略粗暴,在支持CGI的Web做事器下,只须要写一个大略的脚本,然后在脚本中输出内容,这些内容就会返回给前台。
举个大略的例子,利用Python实现一个hello.py:

#!/usr/bin/env pythonprint 'Hello, World! Hello CGI.'

然后把他改名为hello.cgi,支配到Web做事器下,当要求到达的时候,打印的字符串就会通过Web做事器返回到页面。
我们常常称这种运用为console application (也可以称作command-line interface programs) 的程序,这样的脚本称为CGI脚本。

CGI事情完全的事理是这样的:

当用户访问我们的 Web 运用时,会发起一个 HTTP 要求。
终极 Web 做事器吸收到这个要求。
Web 做事器创建一个新的 CGI 进程。
在这个进程中,将 HTTP 要求数据已一定格式解析出来,并通过标准输入和环境变量传入到 URL 指定的 CGI 程序。
Web 运用程序处理完成后将返回数据写入到标准输出中,Web 做事器进程则从标准输出流中读取到相应,并采取 HTTP 协议返回给用户相应。

一句话便是 Web 做事器中的 CGI 进程将吸收到的 HTTP 要求数据读取到环境变量中,通过标准输入转发给CGI程序;当CGI程序处理完成后,Web 做事器中的CGI进程从标准输出中读取返回数据,并转换回 HTTP 相应格式,终极将页面呈现给用户。
然后 Web 做事器关闭掉这个 CGI 进程。

可以说 CGI 协议特殊善于处理 Web 做事器和 Web 运用的通信问题。
然而,它有一个严重毛病,对付每个要求都须要重新 fork 出一个 CGI 进程,处理完成后立即关闭。
当要求量比较大时,会有严重的性能问题,由于频繁的创建进程和回收进程,会占用非常多的做事器资源。
由于CGI的性能问题,于是新一代的CGI技能,FastCGI应运而生。

FastCGI

快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web做事器通信的协议。
FastCGI是早期通用网关接口(CGI)的增强版本。

FastCGI致力于减少网页做事器与CGI程序之间交互的开销,从而使做事器可以同时处理更多的网页要求。

而FastCGI的事情事理是这样的:

FastCGI 进程管理器启动时会创建一个 主(Master) 进程和多个 CGI 阐明器进程(Worker 进程),然后等待 Web 做事器的连接。
Web 做事器吸收 HTTP 要求后,将 CGI 报文通过 套接字(UNIX 或 TCP Socket)进行通信,将环境变量和要求数据写入标准输入,转发到 CGI 阐明器进程。
CGI 阐明器进程完成处理后将标准输出和缺点信息从同一连接返回给 Web 做事器。
CGI 阐明器进程等待下一个 HTTP 要求的到来。

以是FastCGI可以看作是办理原始CGI性能问题的一个升级版本。

WSGI

WSGI:全称是Web Server Gateway Interface,Web做事器网关接口,WSGI不是做事器,Python模块,框架,API或者任何软件,只是一种规范,描述前面Web做事器如何与Web运用通信的规范。

前面先容网关接口的时候先容了CGI、FastCGI等,那这里的WSGI紧张是Python为Web做事器和Web运用程序之间通信而设计的。
在Python中,常见的Web框架Tornado、Django、Flask都支持利用WSGI和Web做事器进行通信,而在采取WSGI协议的时候,则常常安装uWSGI模块来完成通信。

ASGI

与WSGI类似的还有一个ASGI,ASGI也是由Python实现的一类网关接口,这里的A指的是Async,异步的意思。
ASGI是WSGI的扩展,支持除了原来的HTTP以外的WebSocket等的网络协议。

Servlet、Tomcat

终于来到Java阵营了,在前面的CGI、FastCGI、WSGI等等,紧张都是PHP、C++、Python等措辞实现Web运用程序和Web做事器通信的网关接口,尤其是CGI、FastCGI,在以前C++、PHP大行其道的时候,它们拥有广泛的用户根本,像腾讯等大企业,由于历史的关系,内部系统中还有很多保留着CGI、FastCGI等技能。
那么在Java的阵营下,一样平常利用什么技能作为Web做事器和Web运用框架之间的通信呢?

Servlet,谈到Java不得不谈的一项技能,全称Server Applet,是用Java编写的做事器端程序,可以看做是前面我们先容的Web运用程序。
其紧张功能在于交互式地浏览和修正数据,天生动态Web内容。
Servlet最初出身在1997年,最新的一个版本Servlet4.0于2017年9月份推出,Servlet拥有广泛的用户群体。

如果说Servlet是运用程序,那Servlet容器便是包含运用程序的Web做事器,常见的Servlet容器就有我们熟知的汤姆猫(Tomcat)、Jetty等,Servlet容器管理着Servlet运用,我们的Servlet程序一样平常通过Servlet容器对外进行做事。

随着Docker容器技能和K8S容器编排技能的成熟,本日微做事技能也是非常热门,而微做事离不开的Spring Boot、Spring Cloud的个中,就有Servlet、Servlet容器的身影。

我们说说Spring Boot,对付Spring Boot,大家都被他快捷的开拓和支配办法所吸引,Spring Boot是由早期的Spring框架发展而来的,其设计目的是用来简化新Spring运用的初始搭建以及开拓过程。
在我们开拓利用Spring Boot开拓Web后台的时候,我们在写完逻辑代码的时候,在本地只须要点击运行,就能通过浏览器进行调试,颇为方便;这和前面我们利用PHP、Python开拓Web程序非常类似,我们在利用Flask、Tornado等框架开拓Web程序的时候,也可以通过大略的启动,就可以在本地通过浏览器去调试。
但是这里是有一些差异的,我们说Flask、Tornado等框架是Web运用框架,没有说他们是Web做事器,他们通过前面先容的网关接口(GI)通信,但是在利用Spring Boot的时候,却很少说须要把它支配在Web做事器Apache、Nginx之下,一样平常支配Spring Boot运用的时候,我们直接把它打包成jar包,就可以在做事器跑起来对外做事了。
这是为什么呢?

实在Spring Boot内嵌了Servlet容器Tomcat,也便是Spring Boot既充当了Web运用程序的角色,也充当了Web做事器的角色,在开拓Spring Boot运用程序的过程中,我们是先通过代码实现了Web运用程序的逻辑,处理要乞降应答,而Servlet容器的部分,完备不须要我们去配置,这便是Spring Boot大略、便捷,高效的开拓效率的缘故原由,以是现在很多同学都喜好利用Spring Boot去开拓Web的后台。
Spring Boot供应了大略的开拓模式,但是也带来一些问题,比如说很多同学根本无法分清楚Web运用程序和Web做事器的差异等等。

末了大略的回顾一下本日这篇文章,我们紧张是先容了现在Web后端各种网关接口,包括CGI、FastCGI、WSGI等,在理解这些之前,我们须要弄懂Web做事器和Web运用程序,而网关接口,便是紧张事情在Web做事器和Web运用程序之间的。
末了我们还先容了Java阵营的技能,在Java现在大行其道的Spring Boot框架里面,我们不再特意强调Web做事器和Web运用程序,Spring Boot框架是把两个领悟在一起的一个框架,Spring Boot可以便捷的开拓和支配Web程序,便是由于内部包含了一个叫Tomcat的Servlet容器,也便是Web做事器。

末了希望这篇文章对大家捋清楚Web后台技能和网关接口,都能有一定的帮助。

标签:

相关文章

php常量率低技巧_PHP 常量详解教程

PHP 常量常量是单个值的标识符(名称)。在脚本中无法改变该值。有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。注释...

网站推广 2024-12-19 阅读0 评论0