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

}

}

}

}

}

CloudCone 新增洛杉矶优化线路 年付17.99美元且简单线路测试

CloudCone 商家在以前的篇幅中也有多次介绍到,这个商家也蛮有意思的。以前一直只有洛杉矶MC机房,而且在功能上和Linode、DO、Vultr一样可以随时删除采用按时计费模式。但是,他们没有学到人家的精华部分,要这样的小时计费,一定要机房多才有优势,否则压根没有多大用途。这不最近CloudCone商家有点小变化,有新人洛杉矶优化线路,具体是什么优化的等会我测试看看线路。内存CPU硬盘流量价格...

SpinServers(月89美元) 2*e5-2630L v2,美国独立服务器

SpinServers服务商也不算是老牌的服务商,商家看介绍是是2018年成立的主机品牌,隶属于Majestic Hosting Solutions LLC旗下。商家主要经营独立服务器租用和Hybrid Dedicated服务器等,目前包含的数据中心在美国达拉斯、圣何塞机房,自有硬件和IP资源等,商家还自定义支持用户IP广播到机房。看到SpinServers推出了美国独服的夏季优惠促销活动,最低月...

georgedatacenter:美国VPS可选洛杉矶/芝加哥/纽约/达拉斯机房,$20/年;洛杉矶独立服务器39美元/月

georgedatacenter怎么样?georgedatacenter这次其实是两个促销,一是促销一款特价洛杉矶E3-1220 V5独服,性价比其实最高;另外还促销三款特价vps,大家可以根据自己的需要入手。georgedatacenter是一家成立于2019年的美国vps商家,主营美国洛杉矶、芝加哥、达拉斯、新泽西、西雅图机房的VPS、邮件服务器和托管独立服务器业务。georgedatacen...

php多线程为你推荐
集成显卡和独立显卡哪个好集成显卡和独立显卡是什么区别呢哪个好?集成显卡和独立显卡哪个好集成显卡与独立显卡的区别。ps软件哪个好PS哪一款软件比较好用呢英语词典哪个好买什么英语词典比较好360云存储360云盘最高多少内存360云盘企业版360云盘企业版网页打开的 怎么不能编辑?360云盘论坛360云盘怎样不能存视屏了广东联通营业厅广州海珠区有那几个联通营业厅?便宜的近义词便宜的近义词是什么便宜摩托车五羊本田最便宜的摩托车
长春域名注册 企业主机 联通c套餐 英语简历模板word 镇江联通宽带 卡巴斯基试用版 昆明蜗牛家 免费dns解析 789 监控服务器 阵亡将士纪念日 mteam 聚惠网 学生机 godaddyssl 空间排行榜 美国主机 apache启动失败 2016黑色星期五 时间同步服务器 更多