首页 > 其他分享 >CGI和FastCGI

CGI和FastCGI

时间:2024-09-26 13:45:39浏览次数:2  
标签:CGI Web 请求 进程 PHP FastCGI

CGI

通用网关接口CGI(Common Gateway Interface)和快速通用网关接口FastCGI(Fast Common Gateway Interface/FastCGI)都是是接口规范。是服务器与外部程序(如脚本或应用)之间通信的一种方式,最早被设计用于执行各种服务器端脚本。是服务器与外部可执行程序进行交互的桥梁。

CGI(Common Gateway Interface)

CGI 是早期的标准接口,用于 Web 服务器和外部程序之间进行通信,外部程序可以用任何编程语言编写,只要该语言能够输出标准的文本格式(如 HTML)。一些常用语言中的 CGI 实现包括:
•Perl:最早的 CGI 程序大多是用 Perl 编写的,Perl 的强大文本处理能力让它非常适合处理 Web 请求。
•Python:Python 也有自己的 CGI 模块,允许开发者编写 CGI 脚本来处理 Web 请求。
•Ruby:Ruby 也可以通过 CGI 实现简单的 Web 应用。
•C/C++:由于 CGI 程序本质上是一个外部可执行程序,用 C 或 C++ 编写 CGI 程序也是可以的,尽管开发相对复杂。

FastCGI

FastCGI 是 CGI 的改进版本,优化了性能,同样也可以在多种语言中使用。它的工作原理是通过保持外部程序的长时间运行来避免频繁创建和销毁进程,因此提高了效率。不同语言对 FastCGI 的支持情况:
•PHP:FastCGI 最常见的用例之一是与 PHP-FPM(PHP FastCGI Process Manager)一起使用,提升 PHP 在高并发环境中的性能。
•Python:Python 通过 Web 框架(如 Flask、Django)和 flup 等 FastCGI 实现,支持 FastCGI 协议。
•Ruby:Ruby on Rails 可以通过 Phusion Passenger 或其他 FastCGI 实现来支持高效的 Web 请求处理。
•Java:虽然 Java 本身一般通过 Servlet 来处理 Web 请求,但也可以通过 FastCGI 来与 Web 服务器通信。
•Go:Go 语言可以通过第三方库与 FastCGI 集成,用于处理 Web 请求。
•Node.js:虽然 Node.js 主要采用事件驱动的非阻塞 I/O 模式,但也可以通过 FastCGI 与传统 Web 服务器(如 Nginx)进行通信。
•C/C++:如果用 C/C++ 编写的 Web 应用需要高性能,FastCGI 也可以作为一种替代方案来提升效率。

总结

CGI和FastCGI的区别与使用线程池原理类似,避免重复创建和销毁造成的资源浪费

PHP中的应用

CGI(Common Gateway Interface)

CGI 是一种标准协议,用于服务器与外部程序(例如 PHP)进行通信。当一个 CGI 请求发出时,服务器会启动一个新的进程来处理该请求。这种方式有以下特点:
•每个请求都会生成一个新的进程:这意味着对于每个请求,服务器都会启动一个新的 PHP 解释器进程,这个进程在请求处理结束后会被销毁。
•性能问题:因为每次请求都要启动和销毁进程,CGI 的性能在并发请求高的情况下非常低,效率较差。
•适合小规模项目:由于 CGI 的处理方式较为简单,适合小规模的应用或者开发调试阶段。
在使用 ThinkPHP 时,如果服务器配置了 CGI,PHP 脚本会通过 CGI 运行,但这种方式不适合高并发的环境

FastCGI(Fast Common Gateway Interface/FastCGI)

FastCGI 是对 CGI 的改进协议,旨在提高性能。它的工作原理是:
•进程复用:FastCGI 启动后,会保持一组 PHP 进程在内存中,不需要为每个请求重新启动 PHP 解释器进程。多个请求可以复用这些进程,这大大提高了性能。
•持久连接:FastCGI 通过持久化进程,减少了创建和销毁进程的开销,适合处理高并发请求。
•支持并发处理:FastCGI 可以同时处理多个请求,这使得它在大型项目中广泛应用。

在 ThinkPHP 项目中,如果使用 FastCGI,那么 PHP 脚本的执行效率会大大提升,特别是在高并发或大型项目中

ThinkPHP 中的 CGI 和 FastCGI 使用

在实际部署 ThinkPHP 项目时,通常使用 FastCGI 来提高性能。FastCGI 通常与 Nginx、Apache 结合,通过 PHP-FPM(PHP FastCGI Process Manager)来管理 PHP 进程,从而提升服务器的并发处理能力。

总结

•CGI:每次请求都启动一个新的 PHP 进程,适合小规模项目或开发阶段,但性能较差。
•FastCGI:进程复用,适合高并发和大型项目,性能优越,常与 PHP-FPM 结合使用。

标签:CGI,Web,请求,进程,PHP,FastCGI
From: https://www.cnblogs.com/aeolian/p/18433253

相关文章

  • ArcGIS创建渔网:得到指定大小的网格矢量
      本文介绍在ArcMap软件中,通过“CreateFishnet”工具创建渔网,从而获得指定大小的矢量格网数据的方法。  首先,我们在创建渔网前,需要指定渔网覆盖的范围。这里我们就以四川省为例,在这一范围内创建渔网;其中,四川省的矢量范围如下图所示。  在ArcMap软件中,我们依次选择“Toolb......
  • Arcgis模型构建器04——深入学习篇04——模型工具与地图文档进行交互
    前言在使用模型工具的时候,有些输入数据我想每次执行的时候都自己手动绘制一个面进行输入,那么该如何实现呢?解决办法我们可以把这个输入参数的类型设置为要素集,如图:右击要素集变量,选择属性,选择数据类型,我们可以再这里选择一个符号系统模版来对该要素集进行显示,导入的符......
  • ArcGIS标注表达式用到的字段值有空值导致标签无法显示怎么办
    数据:几个楼,包含三个字段信息,其中有的楼没有地下楼层的话,地下楼层字段值为空目标:用标注“显示名称+地上楼层+地下楼层”等信息, 遇到的问题:如果只是简单的把字段相加,地下楼层为空的要素标签不显示 然后我尝试把地下层数换成string类型,试了试还是不行,没有变化 查了下VBScr......
  • arcgis管理员修改密码
    1.找到Server的安装目录下的工具文件夹的密码设置部分。这里提供部分\Server\tools\passwordreset(我的是64位电脑,路径为C:\ProgramFiles\ArcGIS\Server\tools\passwordreset)2.在刚打开的命令提示窗中输入cdC:\ProgramFiles\ArcGIS\Server\tools\passwordreset进入命令所在位置......
  • ArcGIS配色带分享、安装教程
    论文中图片的美观与否,直接反映了论文水平的高低,而成图中的配色更是其中重要的一环。在我们用ArcMap进行遥感影像拉伸配色出图时,常常找寻不到合适的色带方案​。而在参考别人论文里的配色时,却发现自己电脑中ArcMap找不到相对应的颜色,最后导致图片中色彩搭配一言难尽。今天分享一......
  • 【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (
    1.效果目录1.效果2.安装配置3.热力图4.TimeSlider滑块应用 4.1  时间滑块控件 4.2 添加控件5.时间动态热力图 2.安装配置这里不教大家如何在前端框架使用arcgisapi。不过npm安装、css如何引入、教学数据存放与图层加载的教程,可以浏览我之前发的一篇文章,......
  • Arcgis api 4.x 专题图制作之分级色彩,采用自然间断法;(使用simple-statistics JS数学统
    1.效果2.实现 2.1分级色彩    分级色彩是在GIS制图中,通过不同颜色等级来表示数据量级差异的符号化方法,帮助用户直观识别和比较数据的大小。 2.2分级方法     在GIS中进行分级色彩制图时,可以选择不同的分级方法来表示数据的分布和变化,常见的分......
  • ArcGIS Pro SDK (十四)地图探索 2 地图图层
    ArcGISProSDK(十四)地图探索2地图图层文章目录ArcGISProSDK(十四)地图探索2地图图层1地图1.1获取活动地图的名称1.2清除活动地图中的所有选择1.3以地图单位计算选择容差1.4地图视图叠加控制2图层2.1选择目录中的所有要素图层2.2闪烁所选......
  • solidworks卸载工具,专用卸载修复工具,一键卸载solidworks ae ai ansys arcgis catia c
    XXClean是一款专业的系统清理工具,旨在帮助用户彻底卸载和清理各种软件残留。它支持广泛的软件列表,aeaiansysArcGlSCatiaCDRCreoDaVinciMastercamMatlabMultisimofficeOriginProepsRhinoSketchupSPSSsolidworksTIAPortalUGNX软件等。以下是XXClean的简介......
  • ArcGIS Pro SDK (十二)布局 8 布局元素选择和更改
    ArcGISProSDK(十二)布局8布局元素选择和更改文章目录ArcGISProSDK(十二)布局8布局元素选择和更改1布局元素选择1.1在布局上查找元素1.2查找布局元素1.3更新元素属性1.4获取元素选择计数1.5设置元素选择1.6取消选择布局上的元素1.7在布局视图......