<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[PHP开发] stream_socket_client最多开多少个socket]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Fri, 12 Apr 2013 01:40:53 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	当有人想要实现并发功能时，他们通常会想到用fork或者spawn threads，但是当他们发现php不支持多线程的时候，大概会转换思路去用一些不够好的语言，比如perl。<br/>其实的是大多数情况下，你大可不必使用fork或者线程，并且你会得到比用fork或thread更好的性能。<br/>它运行的很好，但是在fsockopen()分析完hostname并且建立一个成功的连接（或者延时$timeout秒）之前，扩充这段代码来管理大量服务器将耗费很长时间。<br/>因此我们必须放弃这段代码；我们可以建立异步连接-不需要等待fsockopen返回连接状态。PHP仍然需要解析hostname（所以直接使用ip更加明智），不过将在打开一个连接之后立刻返回，继而我们就可以连接下一台服务器。<br/><br/>PHP5中可以使用新增的stream_socket_client()函数直接替换掉fsocketopen()。PHP5之前的版本，你需要自己动手，用sockets扩展解决问题。<br/><br/>php中stream_socket_client的多路复用采集网站数据，同时开多少个比较合适呢，要求在最短时间内采集最多数据：<br/><textarea name="code" class="php" rows="15" cols="100">
 
for($i=0;$i&lt;$end;$i++)&#123;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp; $s&nbsp;&nbsp;= stream_socket_client($host.&quot;:&quot;.$port,$errno,$errstr,10);
&nbsp;&nbsp;&nbsp;&nbsp; if($s)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sockets[$i] = $s;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$hmsg = &quot;GET &quot;.$path.&quot;?&quot;.geturl().&quot; HTTP/1.0&#92;r&#92;nHost:&quot;.$host.&quot;&#92;r&#92;n&#92;r&#92;n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite($s,$hmsg);
&nbsp;&nbsp;&nbsp;&nbsp; &#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(&#039;f&#039;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//连接未发送出去
&nbsp;&nbsp;&nbsp;&nbsp; &#125;
&#125;
while(count($sockets))&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;$read = $sockets;
&nbsp;&nbsp;&nbsp;&nbsp;stream_select($read,$w=null,$e=null,10);
&nbsp;&nbsp;&nbsp;&nbsp;if(count($read))&#123;
&nbsp;&nbsp;&nbsp;&nbsp; foreach($read as $r)&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$id = array_search($r,$sockets);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data = fread($r,1024);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(strlen($data)==0)&#123; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fclose($r);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unset($sockets[$id]);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//todo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp;&nbsp;&nbsp; &#125;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;else&#123;
&nbsp;&nbsp;&nbsp;&nbsp; exit(&#039;f&#039;); //时间结束
&nbsp;&nbsp;&nbsp;&nbsp; break;
&nbsp;&nbsp;&nbsp;&nbsp;&#125;
&nbsp;&nbsp; &#125; 

</textarea>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [PHP开发] stream_socket_client最多开多少个socket]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>