• 技术文章 >后端开发 >php教程

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

    2016-06-01 12:17:30原创360
    最近比较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例子

    1. php -f test.php
    2. php -r “echo time();”
    3. php -R as python style

    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例子

      1. php -f test.php
      2. php -r “echo time();”
      3. php -R as python style

      PHP读取命令行参数:

      ___FCKpd___1

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

      1. php
      2. #!/usr/bin/php -q
      3. /* Define STDIN in case if it is not already defined by PHP for some reason */
      4. if(!defined(“STDIN”)) {
      5. define(“STDIN”, fopen(‘php://stdin’,'r’))
      6. }
      7. echo “Hello! What is your name (enter below):\n”;
      8. $strName = fread(STDIN, 80); // Read up to 80 characters or a newline
      9. echo ‘Hello ‘ , $strName , “\n”;
      10. ?>

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

      进程控制相关函数:

      1. Process Control Extensions
      2. pcntl_fork()
      3. posix_setsid()
      4. posix_kill
      5. pcntl_wait
      6. pcntl_signal
      7. SIGHUP
      8. SIGTERM; system shutdown, kill
      9. SIGINT; sent by Ctrl+c
      10. SIGKILL (uncatchable); unresponsive, kill -9
      11. SIGCHLD; child status change
      12. SIGSTP; sent by Ctrl+z
      13. SIGCONT; resume from stop, fg

      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例子

      1. php -f test.php
      2. php -r “echo time();”
      3. php -R as python style

      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核实处理。
    专题推荐:实战 编程 进程 服务器 PHP
    上一篇:PHP程序员面试 切忌急功近利(更需要注重以后的发展)_php文摘_PHP 下一篇:浅析PHP Extension开发基础篇_PHP
    PHP编程就业班

    相关文章推荐

    • PHP下传文件涉及到的参数 • php与mysql的链接有关问题 • 求PHP网站靠山管理 管理员 权限控制 系统方案 • PHP正则解决方案 • session有关问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网