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

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

为大同等地区用户提供了全套网页设计制作服务,及大同网站建设行业解决方案。主营业务为网站制作、成都做网站、大同网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

推荐阅读:让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. #!/usr/bin/php -q  
  2. echo “Test Arguments:\n”;  
  3. echo $_SERVER["argc"].”\n”;  
  4. echo $_SERVER["argv"][0].”\n”;  
  5. ?> 

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

 
 
 
  1. #!/usr/bin/php -q  
  2. /* Define STDIN in case if it is not already defined by PHP for some reason */  
  3. if(!defined(“STDIN”)) {  
  4. define(“STDIN”, fopen(‘php://stdin’,'r’))  
  5. }  
  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.  
  8. SIGHUP  
  9. SIGTERM; system shutdown, kill  
  10. SIGINT; sent by Ctrl+c  
  11. SIGKILL (uncatchable); unresponsive, kill -9  
  12. SIGCHLD; child status change  
  13. SIGSTP; sent by Ctrl+z  
  14. 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

【编辑推荐】

  1. PHP生成随机字符串的三种方法
  2. 百万级PHP网站架构工具箱
  3. 大型Web应用运行时 PHP负载均衡指南
  4. 让PHP开发者事半功倍的十大技巧
  5. PHP资深开发者谈:缘何放弃PHP改用Python

当前文章:服务器端PHP多进程编程实战
网页网址:http://www.gawzjz.com/qtweb/news41/207591.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联