代码PHP多线程的实现方法详解

php多线程  时间:2021-01-31  阅读:()

PHP多线程的实现方法详解多线程是java中一个很不错的东西很多朋友说在php中不可以使用PHP多线程了其实那是错误的说法PHP多线程实现方法和fsockopen函数有关下面我们来介绍具体实现程序代码有需要了解的同学可参考。

当有人想要实现并发功能时他们通常会想到用fork或者spawnthreads但是当他们发现php不支持多线程的时候大概会转换思路去用一些不够好的语言 比如perl。

其实的是大多数情况下你大可不必使用fork或者线程并且你会得到比用fork或thread更好的性能。

假设你要建立一个服务来检查正在运行的n台服务器以确定他们还在正常运转。你可能会写下面这样的代码

代码如下 复制代码<?php

$hosts=array("host1 .sample.com", "host2.sample.com",

"host3.sample.com");

$timeout=15;

$status=array();foreach($hosts as$host) {

$errno=0;

$errstr="";

$s=fsockopen($host,80,$errno,$errstr,$timeout);

它运行的很好但是在fsockopen()分析完hostname并且建立一个成功的连接或者延时$timeout秒之前扩充这段代码来管理大量服务器将耗费很长时间。

因此我们必须放弃这段代码我们可以建立异步连接-不需要等待fsockopen返回连接状态。 PHP仍然需要解析hostname 所以直接使用ip更加明智 不过将在打开一个连接之后立刻返回继而我们就可以连接下一台服务器。

有两种方法可以实现PHP5中可以使用新增的stream_socket_cl ient()函数直接替换掉fsocketopen()。 PHP5之前的版本你需要自己动手

用sockets扩展解决问题。

下面是PHP5中的解决方法

它运行的很好但是在fsockopen()分析完hostname并且建立一个成功的连接或者延时$timeout秒之前扩充这段代码来管理大量服务器将耗费很长时间。

因此我们必须放弃这段代码我们可以建立异步连接-不需要等待fsockopen返回连接状态。 PHP仍然需要解析hostname 所以直接使用ip更加明智 不过将在打开一个连接之后立刻返回继而我们就可以连接下一台服务器。

有两种方法可以实现PHP5中可以使用新增的stream_socket_cl ient()函数直接替换掉fsocketopen()。 PHP5之前的版本你需要自己动手用sockets扩展解决问题。

下面是PHP5中的解决方法

代码如下 复制代码<?php

$hosts=array("host1 .sample.com", "host2.sample.com",

"host3.sample.com");

$timeout=15;

$status=array();

$sockets=array();

/* Initiate connections to al l the hosts simultaneously*/foreach($hosts as$id=>$host) {

$s=stream_socket_cl ient("

$

我们用stream_select()等待sockets打开的连接事件。 stream_select()调用系统的select(2)函数来工作前面三个参数是你要使用的streams的数组你可以对其读取写入和获取异常分别针对三个参数 。stream_select()可以通过设置$timeout 秒参数来等待事件发生-事件发生时相应的sockets数据将写入你传入的参数。

下面是PHP4.1 .0之后版本的实现如果你已经在编译PHP时包含了

sockets(ext/sockets)支持你可以使用根上面类似的代码只是需要将上面的streams/fi lesystem函数的功能用ext/sockets函数实现。主要的不同在于我们用下面的函数代替stream_socket_cl ient()来建立连接代码如下 复制代码

现在用socket_select()替换掉stream_select()用socket_read()替换掉fread()用socket_write()替换掉fwrite()用socket_close()替换掉fc l o s e()就可以执行脚本了

PHP5的先进之处在于你可以用stream_select()处理几乎所有的

stream-例如你可以通过includeSTDIN用它接收键盘输入并保存进数

组你还可以接收通过proc_open()打开的管道中的数据。

下面来分享一个PHP多线程类

代码如下 复制代码

{

$out="GET{$_SERVER['PHP_SELF']}?flag=$i HTTP/1 .1rn";$out .="Host: {$_SERVER['HTT P_HOST']}rn";

$out .="Connection:Closernrn";fputs($fp,$out);fcl os e($fp);

}

}

}

}

}

hosthatch:14个数据中心15美元/年

hosthatch在做美国独立日促销,可能你会说这操作是不是晚了一个月?对,为了准备资源等,他们拖延到现在才有空,这次是针对自己全球14个数据中心的VPS。提前示警:各个数据中心的网络没有一个是针对中国直连的,都会绕道而且ping值比较高,想买的考虑清楚再说!官方网站:https://hosthatch.com所有VPS都基于KVM虚拟,支持PayPal在内的多种付款方式!芝加哥(大硬盘)VPS5...

ZJI韩国BGP+CN2服务器,440元起

ZJI又上新了!商家是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。本次商家新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码,优惠后韩国服务器最低每月440元起。韩国一型CPU:Intel 2×E5-2620 十二核二十四线...

热网互联33元/月,香港/日本/洛杉矶/韩国CN2高速线路云主机

热网互联怎么样?热网互联(hotiis)是随客云计算(Suike.Cloud)成立于2009年,增值电信业务经营许可证:B1-20203716)旗下平台。热网互联云主机是CN2高速回国线路,香港/日本/洛杉矶/韩国CN2高速线路云主机,最低33元/月;热网互联国内BGP高防服务器,香港服务器,日本服务器全线活动中,大量七五折来袭!点击进入:热网互联官方网站地址热网互联香港/日本/洛杉矶/韩国cn2...

php多线程为你推荐
月付百万的女人们满身香水味的女人和满身油烟味的女人,那种才男人们最想要的的女人?视频剪辑软件哪个好常见好用的视频剪辑软件都有哪些?传奇类手游哪个好什么传奇类手游好玩不坑钱?录音软件哪个好什么录音软件最好用手机杀毒哪个好手机杀毒软件哪个最好用视频软件哪个好手机看视频用什么软件好美国国际东西方大学美国新常春藤大学有哪些?qq空间登录网址开通QZONe东莞电信宽带套餐广东东莞电信宽带资费是怎么样的?广东联通彩铃中国联通炫铃怎么设置?
域名注册申请 山东vps 域名服务器的作用 域名备案收费吗 ftp空间 stablehost ix主机 私服服务器 老左博客 英语简历模板word 日志分析软件 新世界电讯 正版win8.1升级win10 tightvnc 网通服务器ip 本网站服务器在美国 anylink admit的用法 徐正曦 免费吧 更多