PHP多线程的实现方法详解

PHP多线程的实现方法详解

ID:39467257

大小:41.00 KB

页数:11页

时间:2019-07-04

PHP多线程的实现方法详解_第1页
PHP多线程的实现方法详解_第2页
PHP多线程的实现方法详解_第3页
PHP多线程的实现方法详解_第4页
PHP多线程的实现方法详解_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。