欢迎来到天天文库
浏览记录
ID:39467257
大小:41.00 KB
页数:11页
时间:2019-07-04
《PHP多线程的实现方法详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、PHP多线程的实现方法详解多线程是java中一个很不错的东西,很多朋友说在php中不可以使用PHP多线程了,其实那是错误的说法PHP多线程实现方法和fsockopen函数有关,下面我们来介绍具体实现程序代码,有需要了解的同学可参考。当有人想要实现并发功能时,他们通常会想到用fork或者spawnthreads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。假设你要建立一个服务来检查正
2、在运行的n台服务器,以确定他们还在正常运转。你可能会写下面这样的代码: 代码如下复制代码
3、Connectedn"; fwrite($s,"HEAD/HTTP/1.0rnHost:$hostrnrn"); do{ $data=fread($s,8192); if(strlen($data)==0){ break; } $status[$host].=$data; }while(true); fclose($s); }else{ $status[$host]="Connectionfailed:$errno$errstrn"; }}print_r($status);?> 它运行的很好,但是在fsockopen(
4、)分析完hostname并且建立一个成功的连接(或者延时$timeout秒)之前,扩充这段代码来管理大量服务器将耗费很长时间。因此我们必须放弃这段代码;我们可以建立异步连接-不需要等待fsockopen返回连接状态。PHP仍然需要解析hostname(所以直接使用ip更加明智),不过将在打开一个连接之后立刻返回,继而我们就可以连接下一台服务器。有两种方法可以实现;PHP5中可以使用新增的stream_socket_client()函数直接替换掉fsocketopen()。PHP5之前的版本,你需要自己动手,用sockets扩展解
5、决问题。下面是PHP5中的解决方法:它运行的很好,但是在fsockopen()分析完hostname并且建立一个成功的连接(或者延时$timeout秒)之前,扩充这段代码来管理大量服务器将耗费很长时间。因此我们必须放弃这段代码;我们可以建立异步连接-不需要等待fsockopen返回连接状态。PHP仍然需要解析hostname(所以直接使用ip更加明智),不过将在打开一个连接之后立刻返回,继而我们就可以连接下一台服务器。有两种方法可以实现;PHP5中可以使用新增的stream_socket_client()函数直接替换掉fsock
6、etopen()。PHP5之前的版本,你需要自己动手,用sockets扩展解决问题。下面是PHP5中的解决方法: 代码如下复制代码$host){ $s
7、=stream_socket_client("$$host:80",$errno,$errstr,$timeout, STREAM_CLIENT_ASYNC_CONNECT
8、STREAM_CLIENT_CONNECT); if($s){ $sockets[$id]=$s; $status[$id]="inprogress"; }else{ $status[$id]="failed,$errno$errstr"; }}/*Now,waitfortheresultstocomebackin*/while(count($sockets
9、)){ $read=$write=$sockets; /*Thisisthemagicfunction-explainedbelow*/ $n=stream_select($read,$write,$e=null,$timeout); if($n>0){ /*r
此文档下载收益归作者所有