推广 热搜: csgo  vue  2023  angelababy  gps  信用卡  新车  htc  落地  控制 

一文看懂各类网关接口(GI)

   2023-08-23 网络整理佚名1750
核心提示:与WSGI类似的还有一个ASGI,ASGI也是由实现的一类网关接口,这里的A指的是Async,异步的意思。最后简单的回顾一下今天这篇文章,我们主要是介绍了现在Web后端各种网关接口,包括CGI、、WSGI等,在理解这些之前,我们需要弄懂Web服务器和Web应用程序,而网关接口,就是主要工作在Web服务器和Web应用程序之间的。

点击上方☝Java编程技术乐园,轻松关注!及时获取有趣、翔实的技术文章

文章很好,耐心看完,记得点赞关注哦~

前几天和同事讨论CGI的性能以及为什么CGI是落后技术时,发现很多人对CGI等网关技术并不熟悉。 这里相信很多同学也听说过CGI、WSGI等词语,但是很多同学应该分不清他们的区别和联系。 在本文中,我将与您讨论这些技术的发展简史。 本文标题中的GI指的是( )的缩写。

在了解网关接口之前,我们需要先弄清楚两件事:Web 服务器和 Web 应用程序。 什么是网络服务器? 什么是网络应用程序? 虽然在我的小程序课程中,有介绍两者的区别,但是这里考虑到很多同学没有学过这门课程,所以我们先把这两个概念弄清楚,不然后面讨论网关的接口就只会一知半解。

网络服务器

首先,什么是Web服务器。 网络服务器是一个服务于网站后台的软件,是驻留在物理服务器上的计算机程序。 Web服务器可以向浏览器等Web客户端提供文档,也可以放置网站文件供全世界浏览; 它可以放置数据文件供全世界下载。 目前最主流的三种Web服务器是Nginx、IIS、Nginx。

它是世界排名第一的Web服务器软件。 它可以运行在几乎所有广泛使用的计算机平台上,并因其跨平台和安全性而被广泛使用,是最流行的Web服务器端软件之一。 它快速、可靠且可扩展,通过简单的 API 将 Perl/etc 解释器编译到服务器中。

Nginx 是一个轻量级的 Web 服务器/反向代理服务器和电子邮件(IMAP/POP3)代理服务器,在类 BSD 协议下发布。 其特点是内存少、并发性强。 事实上,Nginx的并发能力比其他同类型的Web服务器要好。 中国大陆Nginx网站的用户包括:百度、京东、新浪、网易、腾讯、淘宝等。

这里简单讨论一下Nginx和Nginx的区别。 在资源方面,Nginx占用内存较少; 在性能方面,Nginx具有更强的并发能力; 更富有。 另外,Nginx比Nginx还有更多的功能。 Nginx除了作为Web服务器之外,还经常被用作反向代理服务器等,主要是作为Web服务器使用。

还有IIS。 IIS 是 公司提供的 Web 服务器。 一般部署在系统上,并有一定的用户。

Web应用程序

现在我们已经了解了 Web 服务器,让我们继续讨论 Web 应用程序。

Web应用程序一般是指完成业务逻辑的程序。 例如,熟悉语言的人经常使用Flask等框架来完成业务逻辑处理、接受请求、返回结果; 熟悉Java语言的人经常使用Boot等来完成业务逻辑处理; 熟悉PHP语言的人经常使用PHP、CI等框架来完成Web后台的开发; 而Node.js等,都会有相应的框架来完成Web请求的处理。

这些就是定义为Web应用程序的东西,也就是我们常说的Web框架。 例如,一方问另一方,你们一般使用什么Web框架? 这是网络应用程序。

那么Web服务器和Web应用程序有什么区别呢? 其实在前面的描述中我已经明确了,Web应用程序主要完成业务逻辑的处理,Web服务器主要接收和转发外部请求。 这里需要注意的是,我们一般不应该把业务逻辑放在Web服务器上进行处理。 虽然Web服务器支持多种脚本进行扩展,但一般情况下我们不应该把业务逻辑放在Web服务器上进行处理。 比如拦截请求、认证处理等等。

看到这里,有些人可能又产生疑问了。 在开发Web应用程序时,我们可以直接运行应用程序来接受请求。 为什么我们需要网络服务器的存在。 例如使用时可以直接输入命令.py来接收请求。 为什么需要网络服务器?

这主要是从性能角度考虑的。 虽然Web应用程序在开发阶段可以通过一些命令启动服务,但这些功能主要用于调试。 实际部署上线的时候,如果流量大了,性能就不行了。 ,因此需要 Web 服务器的存在。 Web服务器是专门用来接收和处理外部请求的软件,因此Web服务器的性能会比Web应用程序更好,毕竟技术行业有专长。 Web服务器处理静态资源请求(CSS、JS、HTML、图片)等,其性能会比Web应用程序更好。 另外,一些非静态资源的请求需要转发到后台Web应用程序。

至此,我们已经基本区分出了Web服务器和Web应用程序的区别。 这里我们注意一个关键词“转发”。 当Web服务器接受请求时,它会将请求转发给后台Web应用程序进行处理。 本文的主角,GI就是在这个转发过程中工作的。

计算机图形图像处理

终于轮到主角“网关接口”了。 我介绍了GI的工作场所,然后我们讨论一下现在的GI是什么,它们有什么特点和区别。

第一个是CGI,它代表(通用网关接口)。 CGI 是一项古老的技术。 最初由美国国家超级计算机应用中心 (NCSA) 于 1993 年为 NCSA HTTPd Web 服务器开发。 CGI的原理非常简单粗暴。 在支持CGI的Web服务器下,只需要编写一个简单的脚本,然后输出脚本中的内容,内容就会返回给前台。 作为一个简单的示例,使用以下命令实现 hello.py:

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

然后将其重命名为 hello.cgi 并将其部署到 Web 服务器。 当请求到达时,打印的字符串将通过Web服务器返回到页面。 我们常常将这种应用程序称为(也称为行)程序,这样的脚本称为CGI脚本。

ci框架通过url传值_java通过url传参_ci框架传值接值

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技术应运而生。

快速通用网关接口 (Fast/) 是交互式程序与 Web 服务器进行通信的协议。 早期通用网关接口 (CGI) 的增强版本。

致力于减少Web服务器与CGI程序交互的开销,使服务器能够同时处理更多的网页请求。

其工作原理如下:

进程管理器启动时,会创建一个main()进程和多个CGI解释器进程(进程),然后等待Web服务器的连接。 Web服务器收到HTTP请求后,通过套接字(UNIX或TCP)传递CGI消息,将环境变量和请求数据写入标准输入,并转发给CGI解释器进程。 CGI 解释器进程完成处理后,会通过同一连接将标准输出和错误信息返回到 Web 服务器。 CGI解释器进程等待下一个HTTP请求的到来。

所以可以看作是解决原有CGI性能问题的升级版本。

WSGI

WSGI:全称是Web,Web ,WSGI不是服务器、模块、框架、API或任何软件,而是描述以前的Web服务器如何与Web应用程序通信的规范。

前面引入网关接口的时候就引入了CGI等。 这里的WSGI主要是为了Web服务器和Web应用程序之间的通信而设计的。 常见的Web框架、Flask等都支持使用WSGI与Web服务器进行通信,而在使用WSGI协议时,往往会安装uWSGI模块来完成通信。

ASGI

与WSGI类似的还有ASGI,它也是WSGI实现的一类网关接口。 这里的A指的是Async,即异步的意思。 ASGI是WSGI的扩展,支持原始HTTP以外的网络协议。

,

终于来到了Java营地。 前面的CGI、WSGI等,主要是PHP、C++等语言实现Web应用程序与Web服务器之间通信的网关接口,尤其是CGI、C++、PHP在过去比较流行,他们拥有广泛的用户群。 像腾讯这样的大公司,由于历史关系,内部系统中仍然保留着CGI、CGI等很多技术。 那么在Java阵营中,一般采用什么技术作为Web服务器与Web应用框架之间的通信呢?

说到Java不得不说的一项技术,全称是用Java编写的服务器端程序,可以看作是我们前面介绍的Web应用程序。 其主要功能是交互地浏览和修改数据并生成动态Web内容。 最初诞生于1997年,2017年9月推出最新版本.0,拥有广泛的用户群体。

如果是应用程序,那么容器就是包含该应用程序的Web服务器。 常见的容器有我们熟悉的()、Jetty等。 容器管理应用程序,我们的程序一般都是通过容器来服务外界的。

随着容器技术和K8S容器编排技术的成熟,微服务技术在今天也非常流行,而在离不开微服务的Boot和Cloud当中,就有容器的存在。

我们来谈谈启动。 对于Boot来说,大家都被它快速的开发和部署方式所吸引。 Boot是从一个早期的框架发展而来的,其设计目的是为了简化新应用程序的初始构建和开发过程。 当我们开发使用Boot开发Web后台时,当我们写完逻辑代码后,只需要点击本地运行即可通过浏览器进行调试,相当方便; 这对于之前使用PHP、开发Web程序来说非常方便。 同样,当我们使用Flask等框架开发Web程序时,我们也可以通过简单的启动,通过浏览器进行本地调试。 但这里存在一些差异。 我们说Flask等框架是Web应用框架,但我们不说它们是Web服务器。 他们通过前面介绍的网关接口(GI)进行通信,但是在使用Boot时,很少说需要部署在Web服务器和Nginx下。 一般我们在部署Boot应用的时候,直接将其打包成jar包,然后就可以在服务器上运行,为外界服务了。 为什么是这样?

事实上,Boot嵌入了容器,即Boot不仅充当Web应用程序,还充当Web服务器。 在开发Boot应用的过程中,我们首先通过代码实现Web应用的逻辑,处理和,而容器的部分根本不需要我们配置。 这就是为什么Boot简单、方便、开发效率高的原因。 所以现在很多同学都喜欢用Boot来开发Web的后端。 Boot提供了简单的开发模型,但也带来了一些问题。 例如,许多学生根本无法区分Web应用程序和Web服务器之间的区别。

最后简单回顾一下今天的文章。 我们主要介绍了当前Web后端的各种网关接口,包括CGI、WSGI等,在了解这些之前,我们需要了解Web服务器和Web应用程序,而网关接口,主要工作在Web服务器和Web应用程序之间。 最后我们还介绍了Java阵营的技术。 在现在Java流行的Boot框架中,我们不再专门强调Web服务器和Web应用程序。 Boot框架是整合了两者的框架。 Boot可以方便地开发和部署Web程序,是因为它包含一个称为Web服务器的容器。

最后希望本文对大家了解Web后台技术和网关接口有所帮助。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON