资讯专栏INFORMATION COLUMN

workerman / 小谈PHP中的几种运行模式

darkbaby123 / 646人阅读

摘要:话说当下一共有种运行模式,分别是和模块模式。使用,全称进程管理器进行管理。工作原理启动时载入进程管理器进程管理器自身初始化,启动多个解释器进程并等待来自的连接当客户端请求到达时,进程管理器选择并连接到一个解释器。

我们知道 workerman 程序需要在php-cli模式下运行,也就是命令行模式,这块我们有必要了解一下。

话说PHP当下一共有4种运行模式,分别是CGI、FastCGI、CLI和Web模块模式。

CGI

全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据,描述的是客户端和这个程序之间传输数据的一种标准,另外CGI独立于任何语言,所以可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

CGI针对每个用户请求都要开多带带的子进程去维护,所以数量多的时候会出现性能问题,最近几年很少用。

FastCGI

CGI的升级版本,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。

PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

FastCGI工作原理

Web Server启动时载入FastCGI进程管理器;

FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接;

当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。

在正常的CGI模式中,这就结束了,下次还要重新来过。但是在FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

Cli

PHP-CLI是PHP Command Line Interface的简称,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI等)。

我们在Linux下经常使用”php –m”查找PHP安装了那些扩展就是PHP命令行运行模式。 你可以打入 php -h 来看看具体都有什么命令。

在php-cli模式下我们可以直接启动一个php文件并执行,就像workerman中一样

php index.php start

要说明的是,php-cli模式并没有php运行超时的说法。

Module加载

一般是针对apache而言的,这种方式,他们的共同本质都是用 LoadModule 来加载 phpX_module,就是把php作为apache的一个子模块来运行。当通过web访问php文件时,apache就会调用phpX_module来解析php代码,那么phpX_module是怎么来将数据传给php解析器来解析php代码的呢?答案是通过sapi。

所以,以上的apache调用php执行的过程如下:

apache -> httpd -> php5_module -> sapi -> php

apache每接收一个请求,都会产生一个进程来连接php通过sapi来完成请求,可想而知,如果一旦用户过多,并发数过多,服务器就会承受不住了。

而且,把mod_php编进apache时,出问题时很难定位是php的问题还是apache的问题。

小结

如果要搭建一个高性能的PHP WEB服务器,目前最佳的方式是Apache/Nginx + FastCGI + PHP-FPM(+PHP-CGI)方式了,不要再使用 Module加载或者 CGI 方式啦

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28547.html

相关文章

  • workerman / 学习workerman之前需要知道的几种php回调写法

    摘要:在中最常用的几种回调写法如下匿名函数做为回调匿名函数,也叫闭包函数,允许临时创建一个没有指定名称的函数。最经常用作回调函数参数的值。匿名函数的回调经常将其赋给一个变量或一个对象的属性最终结果会输出。 在workerman中会经常使用,我们先写一个回调函数,当某个行为被触发后使用该函数处理相关逻辑。 在PHP中最常用的几种回调写法如下 匿名函数做为回调 匿名函数(Anonymous fu...

    Java_oldboy 评论0 收藏0
  • PHP定时器那点事

    摘要:如果把改成,还能实现微秒纳秒级定时器,岂不美哉实践中应当尽量避免用这种方式实现定时器,不仅因为低效,还略有危险。接下来看看中使用定时器的正确姿势。在这种形式下,实现定时器就有多种玩法。 转载请注明文章来源:https://tlanyan.me/timer-in-php/ 常见的定时器有两种:一种周期性定时执行,例如每天的凌晨三点出报表;另一种在指定时间后执行(一次),例如会员登录系统...

    tyheist 评论0 收藏0
  • ThinkPHP 3.2 整合 Workerman 踩坑

    摘要:一号坑整合加载第三方有几种方式,具体参考官方手册我用的是第一种命名空间自动加载的方式,因为我下的版本是有命名空间的,所以一定要把目录放对了,把文件夹放到下,并且把里面除文件外的所有文件改为结尾。 由于需要开发长连接应用,要用到了Workerman,我是Windows的服务器,所以要把Wokerman装到windows,不得不说Windows做服务器那真是「好用」啊,一开始自己按照Wor...

    OpenDigg 评论0 收藏0
  • workerman 简要分析

    摘要:后面每开启一个子进程,会将子进程的存储到中,用来后面主进程监控子进程,如果子进程意外终止,主进程可以重新佛。将当前子进程设置为会话组再次创建子进程,为了防止在的系统下重新打开控制终端。 wokerman 启动分析 @(学习)[workerman, php] 前期想说的 也是最近才看的代码,遇到不懂得地方就去google,所以这篇文章里面穿插了很多参考资料,可以直接点击阅览。 需要了解一...

    senntyou 评论0 收藏0
  • 部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过

    摘要:如果服务器中该账号的钥匙对已经存在,并且已经将放到该账号的设置中,可以跳过这一步。如果不符合,需要根据提示安装必要的扩展。后续再进行补充做守护队列监听进程和自动部署到服务器的说明。 系统LAMP基础环境是已经搭建好,记录要将web项目部署到线上的过程如下,方便后续部署新项目时参考: laravel项目ubuntu 16.04php 7.0 克隆项目到服务器 (1)我们使用 your@e...

    bluesky 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<