首页 后端开发 php教程 服务器端PHP多进程编程实战_PHP

服务器端PHP多进程编程实战_PHP

Jun 01, 2016 pm 12:17 PM
php 实战 服务器 编程 进程

最近比较PHP跟Python, Erlang的特性,发现PHP有很多人们不常用到的特性。用PHP CLI可以实现很多不错的应用。比如做搜索引擎的爬虫, 长期运行的计算脚本, 完全可以取代其他语言来做服务器的运维。这对于熟悉PHP的人来说如虎添翼。

bitsCN推荐阅读:让PHP开发者事半功倍的十大技巧

为什么PHP多进程很好? 网游服务器大部分都使用多线程而不是多进程的原因也在于进程比线程更加稳定。而且多线程适合现在多核服务器的应用场景,更能发挥多核运算的能力。进程的维护可以用很多操作系统级别的工具。Message Queue解决了多大部分线程通信问题。所以PHP多进程很适合做服务器端的计算密集型的应用。

据一家越南IT公司介绍,他们成功的把PHP后台多进程用在法律文件的分发、处理银行账户的金额这样的企业级的应用上。

使用后台PHP进程可以不影响服务器同时处理网页的请求。这种后台进程一旦发生失败很容易查处原因进行恢复或者补救,所以健壮性更高。不同的进程相互隔离,更加高效,可以统一调度各个服务进程。

PHP是目前应用最广泛的Web开发语言,所以用PHP来做服务器端的应用可以降低成本。可以用现有人员、现有配置、甚至做到代码重用。什么样的场景更适合用PHP后台多进程呢?比如邮件的分发、远程服务的调用、数据的聚合、计划任务、计算结果的缓存这些不需要立即返回的地方。

PHP单进程在某些地方完全可以达到目的,而且更加容易实现,不用考虑进程的同步问题,不用考虑数据的共享问题。PHP CLI(SAPI SERVER API) 命令行接口可以用来做CRON计划任务, 图形界面程序 (使用GTK库)。

PHP CLI例子

<ol class="dp-xml">
<li class="alt"><span><span>php -f test.php  </span></span></li>
<li><span>php -r “echo time();”  </span></li>
<li class="alt"><span>php -R as python style </span></li>
</ol>
登录后复制
登录后复制

PHP读取命令行参数:

  1. php 
  2. #!/usr/bin/php -q  
  3. echo “Test Arguments:\n”;  
  4. echo 

    最近比较PHP跟Python, Erlang的特性,发现PHP有很多人们不常用到的特性。用PHP CLI可以实现很多不错的应用。比如做搜索引擎的爬虫, 长期运行的计算脚本, 完全可以取代其他语言来做服务器的运维。这对于熟悉PHP的人来说如虎添翼。

    bitsCN推荐阅读:让PHP开发者事半功倍的十大技巧

    为什么PHP多进程很好? 网游服务器大部分都使用多线程而不是多进程的原因也在于进程比线程更加稳定。而且多线程适合现在多核服务器的应用场景,更能发挥多核运算的能力。进程的维护可以用很多操作系统级别的工具。Message Queue解决了多大部分线程通信问题。所以PHP多进程很适合做服务器端的计算密集型的应用。

    据一家越南IT公司介绍,他们成功的把PHP后台多进程用在法律文件的分发、处理银行账户的金额这样的企业级的应用上。

    使用后台PHP进程可以不影响服务器同时处理网页的请求。这种后台进程一旦发生失败很容易查处原因进行恢复或者补救,所以健壮性更高。不同的进程相互隔离,更加高效,可以统一调度各个服务进程。

    PHP是目前应用最广泛的Web开发语言,所以用PHP来做服务器端的应用可以降低成本。可以用现有人员、现有配置、甚至做到代码重用。什么样的场景更适合用PHP后台多进程呢?比如邮件的分发、远程服务的调用、数据的聚合、计划任务、计算结果的缓存这些不需要立即返回的地方。

    PHP单进程在某些地方完全可以达到目的,而且更加容易实现,不用考虑进程的同步问题,不用考虑数据的共享问题。PHP CLI(SAPI SERVER API) 命令行接口可以用来做CRON计划任务, 图形界面程序 (使用GTK库)。

    PHP CLI例子

    <ol class="dp-xml">
    <li class="alt"><span><span>php -f test.php  </span></span></li>
    <li><span>php -r “echo time();”  </span></li>
    <li class="alt"><span>php -R as python style </span></li>
    </ol>
    登录后复制
    登录后复制

    PHP读取命令行参数:

    ___FCKpd___1
    登录后复制
    登录后复制

    PHP命令行接口标准输入输出:

    <ol class="dp-xml">
    <li class="alt"><span><strong><font color="#006699"><span class="tag"></span><span class="tag-name">php</span></font></strong><span> </span></span></li>
    <li><span>#!/usr/bin/php -q  </span></li>
    <li class="alt"><span>/* Define STDIN in case if it is not already defined by PHP for some reason */  </span></li>
    <li><span>if(!defined(“STDIN”)) {  </span></li>
    <li class="alt"><span>define(“STDIN”, fopen(‘php://stdin’,'r’))  </span></li>
    <li><span>}  </span></li>
    <li class="alt"><span> </span></li>
    <li><span>echo “Hello! What is your name (enter below):\n”;  </span></li>
    <li class="alt">
    <span>$</span><span class="attribute"><font color="#ff0000">strName</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">fread</font></span><span>(STDIN, 80); // Read up to 80 characters or a newline  </span>
    </li>
    <li><span>echo ‘Hello ‘ , $strName , “\n”;  </span></li>
    <li class="alt">
    <span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
    </li>
    </ol>
    登录后复制

    CRONJOB可以定时运行某些任务,但要防止重复运行。开始时创建一个锁文件, 结束时删除。或者用ps命令来处理。任务队列可以用MySQL来实现,或者Key/VALUE数据库,或者消息队列来实现。

    进程控制相关函数:

    <ol class="dp-xml">
    <li class="alt"><span><span>Process Control Extensions  </span></span></li>
    <li><span>pcntl_fork()  </span></li>
    <li class="alt"><span>posix_setsid()  </span></li>
    <li><span>posix_kill  </span></li>
    <li class="alt"><span>pcntl_wait  </span></li>
    <li><span>pcntl_signal  </span></li>
    <li class="alt"><span> </span></li>
    <li><span>SIGHUP  </span></li>
    <li class="alt"><span>SIGTERM; system shutdown, kill  </span></li>
    <li><span>SIGINT; sent by Ctrl+c  </span></li>
    <li class="alt"><span>SIGKILL (uncatchable); unresponsive, kill -9  </span></li>
    <li><span>SIGCHLD; child status change  </span></li>
    <li class="alt"><span>SIGSTP; sent by Ctrl+z  </span></li>
    <li><span>SIGCONT; resume from stop, fg </span></li>
    </ol>
    登录后复制

    PHP不能对某些错误抛出异常,如何提高PHP多进程应用的容错性?

    ◆可以监控进程,依赖进程失败后报告。

    ◆用CRONJOB实现监控进程。

    ◆将被监控进程PID写成文件。

    ◆定时检查PID文件是否存在 检查ps -o pid=或者file_exists(‘/proc/’)。

    ◆如果线程不存在重启进程。

    回顾以前用Java或者Python做的服务器端的服务都可以用PHP来实现。单一语言更容易维护。以往人们对于Web语言的认识很片面,例如多线程、事 务这些东西都可以改变方式来达到同样的目的。

    原文链接:http://blog.eood.cn/server-side-php-progress-program-best-practice

    SERVER["argc"].”\n”;  
  5. echo 

    最近比较PHP跟Python, Erlang的特性,发现PHP有很多人们不常用到的特性。用PHP CLI可以实现很多不错的应用。比如做搜索引擎的爬虫, 长期运行的计算脚本, 完全可以取代其他语言来做服务器的运维。这对于熟悉PHP的人来说如虎添翼。

    bitsCN推荐阅读:让PHP开发者事半功倍的十大技巧

    为什么PHP多进程很好? 网游服务器大部分都使用多线程而不是多进程的原因也在于进程比线程更加稳定。而且多线程适合现在多核服务器的应用场景,更能发挥多核运算的能力。进程的维护可以用很多操作系统级别的工具。Message Queue解决了多大部分线程通信问题。所以PHP多进程很适合做服务器端的计算密集型的应用。

    据一家越南IT公司介绍,他们成功的把PHP后台多进程用在法律文件的分发、处理银行账户的金额这样的企业级的应用上。

    使用后台PHP进程可以不影响服务器同时处理网页的请求。这种后台进程一旦发生失败很容易查处原因进行恢复或者补救,所以健壮性更高。不同的进程相互隔离,更加高效,可以统一调度各个服务进程。

    PHP是目前应用最广泛的Web开发语言,所以用PHP来做服务器端的应用可以降低成本。可以用现有人员、现有配置、甚至做到代码重用。什么样的场景更适合用PHP后台多进程呢?比如邮件的分发、远程服务的调用、数据的聚合、计划任务、计算结果的缓存这些不需要立即返回的地方。

    PHP单进程在某些地方完全可以达到目的,而且更加容易实现,不用考虑进程的同步问题,不用考虑数据的共享问题。PHP CLI(SAPI SERVER API) 命令行接口可以用来做CRON计划任务, 图形界面程序 (使用GTK库)。

    PHP CLI例子

    <ol class="dp-xml">
    <li class="alt"><span><span>php -f test.php  </span></span></li>
    <li><span>php -r “echo time();”  </span></li>
    <li class="alt"><span>php -R as python style </span></li>
    </ol>
    登录后复制
    登录后复制

    PHP读取命令行参数:

    ___FCKpd___1
    登录后复制
    登录后复制

    PHP命令行接口标准输入输出:

    ___FCKpd___2
    登录后复制
    登录后复制

    CRONJOB可以定时运行某些任务,但要防止重复运行。开始时创建一个锁文件, 结束时删除。或者用ps命令来处理。任务队列可以用MySQL来实现,或者Key/VALUE数据库,或者消息队列来实现。

    进程控制相关函数:

    ___FCKpd___3
    登录后复制
    登录后复制

    PHP不能对某些错误抛出异常,如何提高PHP多进程应用的容错性?

    ◆可以监控进程,依赖进程失败后报告。

    ◆用CRONJOB实现监控进程。

    ◆将被监控进程PID写成文件。

    ◆定时检查PID文件是否存在 检查ps -o pid=或者file_exists(‘/proc/’)。

    ◆如果线程不存在重启进程。

    回顾以前用Java或者Python做的服务器端的服务都可以用PHP来实现。单一语言更容易维护。以往人们对于Web语言的认识很片面,例如多线程、事 务这些东西都可以改变方式来达到同样的目的。

    原文链接:http://blog.eood.cn/server-side-php-progress-program-best-practice

    SERVER["argv"][0].”\n”;  
  6. ?> 

PHP命令行接口标准输入输出:

___FCKpd___2
登录后复制
登录后复制

CRONJOB可以定时运行某些任务,但要防止重复运行。开始时创建一个锁文件, 结束时删除。或者用ps命令来处理。任务队列可以用MySQL来实现,或者Key/VALUE数据库,或者消息队列来实现。

进程控制相关函数:

___FCKpd___3
登录后复制
登录后复制

PHP不能对某些错误抛出异常,如何提高PHP多进程应用的容错性?

◆可以监控进程,依赖进程失败后报告。

◆用CRONJOB实现监控进程。

◆将被监控进程PID写成文件。

◆定时检查PID文件是否存在 检查ps -o pid=或者file_exists(‘/proc/’)。

◆如果线程不存在重启进程。

回顾以前用Java或者Python做的服务器端的服务都可以用PHP来实现。单一语言更容易维护。以往人们对于Web语言的认识很片面,例如多线程、事 务这些东西都可以改变方式来达到同样的目的。

原文链接:http://blog.eood.cn/server-side-php-progress-program-best-practice

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

编码的关键:为初学者释放 Python 的力量 编码的关键:为初学者释放 Python 的力量 Oct 11, 2024 pm 12:17 PM

Python通过其易学性和强大功能,是初学者的理想编程入门语言。其基础包括:变量:用于存储数据(数字、字符串、列表等)。数据类型:定义变量中数据的类型(整数、浮点数等)。运算符:用于数学运算和比较。控制流:控制代码执行流(条件语句、循环)。

使用 Python 解决问题:作为初学者,解锁强大的解决方案 使用 Python 解决问题:作为初学者,解锁强大的解决方案 Oct 11, 2024 pm 08:58 PM

Python 使初学者能够解决问题。其用户友好的语法、广泛的库以及变量、条件语句和循环等功能可实现高效的代码开发。从管理数据到控制程序流程和执行重复任务,Python 提供了

我后悔之前不知道的 7 个 PHP 函数 我后悔之前不知道的 7 个 PHP 函数 Nov 13, 2024 am 09:42 AM

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

揭秘 C:为新程序员提供一条清晰简单的道路 揭秘 C:为新程序员提供一条清晰简单的道路 Oct 11, 2024 pm 10:47 PM

C是一种初学者学习系统编程的理想选择,它包含以下组件:头文件、函数和主函数。一个简单的C程序可以打印“HelloWorld”,需要包含标准输入/输出函数声明的头文件,并在主函数中使用printf函数来打印。通过使用GCC编译器可以编译和运行C程序。掌握基础后,可以继续学习数据类型、函数、数组和文件处理等主题,以成为熟练的C程序员。

See all articles