分享

PHP多线程类Socket方式范例

 大芬油画 2016-11-08

 通过php的Socket方式实现php程序的多线程。php本身是不支持多线程的,那么如何在php中实现多线程呢?

可以想一下,WEB服务器本身都是支持多线程的。每一个访问者,当访问WEB页面的时候,都将调用新的线程,

通过这一点我们可以利用WEB服务器自身的线程来解决PHP不支持多线程的问题。

  下面给出通过 fsockopen() 建立socket连接,然后用 用fputs() 发送消息,来实现的PHP多线程类代码:
  1. $fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5); 
  2. if(!$fp){ 
  3. echo "$errstr ($errno)<br />\n"; 
  4. fputs($fp,"GET $_SERVER[PHP_SELF]?flag=1\r\n"); 
  5. fclose($fp); 

上面这段代码只是一个线程的操作过程。多进行几个这样的操作就是多线程了。目前所谓PHP的多线程程序都是基于这个方式

的。 下面给一个完整的线程类代码。

 

  1. <?php 
  2. /** 
  3. @title:PHP多线程类(Thread) 
  4. @version:1.0 
  5. @author:axgle <axgle@126.com> 
  6. */ 
  7. class thread { 
  8. var $count; 
  9. function thread($count=1) { 
  10. $this->count=$count; 
  11. function _submit() { 
  12. for($i=1;$i<=$this->count;$i++) $this->_thread(); 
  13. return true; 
  14. function _thread() { 
  15. $fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5); 
  16. if(!$fp){ 
  17. echo "$errstr ($errno)<br />\n"; 
  18. fputs($fp,"GET $_SERVER[PHP_SELF]?flag=1\r\n"); 
  19. fclose($fp); 
  20. function exec($func) { 
  21. isset($_GET['flag'])?call_user_func($func):$this->_submit(); 
  22. //应用例子: 
  23. $th=new thread(10);//10个线程 
  24. $th->exec('demo');//执行行自定义的函数 
  25. function demo() { 
  26. fopen('data/'.microtime(),'w'); 
  27. ?> 
(责任编辑:最模板)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多