电脑安全

您当前的位置:主页 > 电脑安全 >

php多路复用(多线程)-网络编程

来源:[db:来源]标题:   一台    编辑:电脑技术全能网 时间:2019-09-22 06:20

原标题:php多路复用(多线程)-网络编程
   近来研讨php多线程的成绩,发觉中文资本少的不幸,唯一的几篇文章被转了又转,但文中内容代价无限。搜寻进程中发觉外洋许多网站援用的一篇文章写的不错,以是翻译过去。版权申明:能够恣意转载,转载时请务必以超链接情势表明文章原始出处和作者信息及本申明成绩:假定你正在写一个基于多台效劳器的php利用,幻想的情形时同时向多台效劳器发送恳求,而不是一台接一台。能够完成吗?答复:当有人想要完成并发功效时,他们平日会想到用fork或许spawn threads,然而当他们发觉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); if ($s) { $status[$host] = "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] = "Connection failed: $errno $errstrn"; }}print_r($status);?>它运转的很好,然而在fsockopen()剖析完hostname而且树立一个胜利的衔接(或许延时$timeout秒)之前,裁减这段代码来治理大批效劳器将消耗很长时光。因而咱们必需废弃这段代码;咱们能够树立异步衔接-不须要等候fsockopen前往衔接状况。PHP依然须要剖析hostname(以是间接应用ip愈加理智),不外将在翻开一个衔接以后连忙前往,继而咱们便可以衔接下一台效劳器。有两种方式能够完成;PHP5中能够应用新增的stream_socket_client()函数间接调换掉fsocketopen()。

上一篇:sql 获取当前日期的最大时间值-网络编程

下一篇:没有了