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

}

}

}

}

}

昔日数据月付12元起,湖北十堰机房10M带宽月付19元起

昔日数据怎么样?昔日数据是一个来自国内服务器销售商,成立于2020年底,主要销售国内海外云服务器,目前有国内湖北十堰云服务器和香港hkbn云服务器 采用KVM虚拟化技术构架,湖北十堰机房10M带宽月付19元起;香港HKBN,月付12元起; 此次夏日活动全部首月5折促销,有需要的可以关注一下。点击进入:昔日数据官方网站地址昔日数据优惠码:优惠码: XR2021 全场通用(活动持续半个月 2021/7...

Virmach 3.23美元可用6个月的VPS主机

Virmach 商家算是比较久且一直在低价便宜VPS方案中玩的不亦乐乎的商家,有很多同时期的商家纷纷关闭转让,也有的转型到中高端用户。而前一段时间也有分享过一次Virmach商家推出所谓的一次性便宜VPS主机,比如很低的价格半年时间,时间到服务器也就关闭。这不今天又看到商家有提供这样的产品。这次的活动产品包括圣何塞和水牛城两个机房,为期六个月,一次性付费用完将会取消,就这么特别的产品,适合短期玩玩...

spinservers($179/月),1Gbps不限流量服务器,双E5-2630Lv3/64GB/1.6T SSD/圣何塞机房

中秋节快到了,spinservers针对中国用户准备了几款圣何塞机房特别独立服务器,大家知道这家服务器都是高配,这次推出的机器除了配置高以外,默认1Gbps不限制流量,解除了常规机器10TB/月的流量限制,价格每月179美元起,机器自动化上架,一般30分钟内,有基本自助管理功能,带IPMI,支持安装Windows或者Linux操作系统。配置一 $179/月CPU:Dual Intel Xeon E...

php多线程为你推荐
朱祁钰和朱祁镇哪个好明英宗和明代宗是怎么回事?朗逸和速腾哪个好买同等价位的朗逸和速腾哪个好?浮动利率和固定利率哪个好银行贷款是选固定利率好还是浮动利率绝地求生加速器哪个好绝地求生用什么加速器比较好?手机管家哪个好有哪些人下了手机管家,最好的是哪个?手机管家哪个好最好的手机管家雅思和托福哪个好考托福、雅思哪个好考?51空间登录怎样登51个人空间YunOSyunos是什么手机东莞电信宽带在东莞报装办理电信宽带好不好用,需要多少钱,在哪里报装
万网域名证书查询 singlehop stablehost isatap 天猫双十一秒杀 xen 国外空间 警告本网站 免费ftp站点 可外链网盘 服务器合租 购买国外空间 网站在线扫描 免费mysql数据库 免费蓝钻 架设代理服务器 magento主机 服务器机柜 cc加速器 赵荣博客 更多