代码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);

}

}

}

}

}

日本美国站群服务器raksmart站群新增,限量低至月1.99美元

RAKsmart 商家八月份的促销活动今天更新。基本上和上个月的产品套餐活动差不多的,不过也是有简单的微调。对于RAKsmart商家还是比较了解的,他们家产品虽然这两年增加多个机房,以及在VPS主机方案上有丰富的机房和调整到一些自营机房,他们家的策划能力还是有限,基本上每个月的套餐活动都差不多。RAKsmart 在八月份看到有新增香港高防服务器可选,最高100GB防御。同时原来上个月缺货的日本独立...

IonSwitch:$1.75/月KVM-1GB/10G SSD/1TB/爱达荷州

IonSwitch是一家2016年成立的国外VPS主机商,部落上一次分享的信息还停留在2019年,主机商提供基于KVM架构的VPS产品,数据中心之前在美国西雅图,目前是美国爱达荷州科德阿伦(美国西北部,西接华盛顿州和俄勒冈州),为新建的自营数据中心。商家针对新数据中心运行及4号独立日提供了一个5折优惠码,优惠后最低1GB内存套餐每月仅1.75美元起。下面列出部分套餐配置信息。CPU:1core内存...

2021HawkHost老鹰主机黑色星期五虚拟主机低至3.5折 永久4.5折

老鹰主机HawkHost是个人比较喜欢的海外主机商,如果没有记错的话,大约2012年左右的时候算是比较早提供支付宝付款的主机商。当然这个主机商成立时间更早一些的,由于早期提供支付宝付款后,所以受众用户比较青睐,要知道我们早期购买海外主机是比较麻烦的,信用卡和PAYPAL还没有普及,大家可能只有银联和支付宝,很多人选择海外主机还需要代购。虽然如今很多人建站少了,而且大部分人都用云服务器。但是老鹰主机...

php多线程为你推荐
金士顿4g内存条4g金士顿内存怎么样软银亏损65亿美元马云仅仅持有阿里8.9%的股份,就有270多亿美元,孙正义的软银占有那么多股份,怎么还不是亚洲首富燃气热水器和电热水器哪个好电热水器和燃气热水器哪一个更安全,且更节省能源?压缩软件哪个好压缩软件用哪个会比较好用朗逸和速腾哪个好大众速腾与朗逸哪个好qq空间登录网页版网页版QQ怎么登陆qq空间登录登陆进入QQ空间进去了叫登陆登陆了又叫登陆空间登录页面怎样用网页登录到自己的QQ空间?网页qq空间登录网页查看qq空间dns服务器设置DNS服务器怎么设置??
虚拟空间主机 电信服务器租赁 免费二级域名申请 火山主机 cybermonday BWH 正版win8.1升级win10 512au 彩虹ip 个人域名 lol台服官网 酷番云 web服务器安全 免费网页空间 四核服务器 789电视剧 web服务器搭建 美国盐湖城 域名转入 汤博乐 更多