php 做的测试scoket服务器稳定性 和 承载能力的程序

<?php
// Client
// 设置错误处理
error_reporting (E_ALL);
// 设置处理时间
set_time_limit (0);

$ip = $argv[1];      // IP 地址
$port = $argv[2];            // 端口号

echo "try to connected to $ip:$port./r/n";
if($argv[3]>1000)
{
 echo 'PHP use socket select,max connection is 1000'."/n";
 $argv[3]=1000;
}
for($i=0;$i<$argv[3];$i++)
{
 $socket[$i] = @socket_create (AF_INET, SOCK_STREAM, SOL_TCP);   // 创建一个SOCKET
 if (!$socket[$i]){   
  echo "$i socket_create() failed:".socket_strerror ($socket[$i])."/n";
  $i--;
  usleep(500000);
  continue;
 }
 socket_set_option($socket[$i],SOL_SOCKET, SO_SNDTIMEO,  array(     "sec"=>0,      "usec"=>250000       )    );
 socket_set_option($socket[$i],SOL_SOCKET, SO_RCVTIMEO,  array(     "sec"=>0,      "usec"=>250000       )    );
 socket_set_option($socket[$i],SOL_SOCKET,SO_REUSEADDR,1);
 
 
 $conn[$i] = @socket_connect ($socket[$i], $ip, $port);       // 建立SOCKET的连接
 if (!$conn[$i])
  echo "$i connect failed!/n";
 usleep(2000);
}

echo "TOTAL Created [$i]/n";

$rlen=0;
$wlen=0;
$rm=0;
$wm=0;
$m=1024*1024;
while (true)
{
 for($i=0;$i<$argv[3];$i++)
 {
     $wlen+=socket_write($socket[$i], "W", 1);
  $rlen+=strlen(socket_read($socket[$i], 128));
  usleep(1000);
 }
 if($rlen>$m)
 {
  $rm+=floor($rlen/$m);
  $rlen=$rlen%$m;
 }
 if($wlen>$m)
 {
  $wm+=floor($wlen/$m);
  $wlen=$wlen%$m;
 }
 print $rm.'->'.$rlen.' '.$wm.'->'.$wlen."/n";
 echo "Time: ".date("Y-m-d H:i:s")."/n";
    sleep(1);
}

?>

 

使用方法:/usr/local/php/bin/php c.php *.*.*.166 13800 1000

posted @ 2010-07-02 10:50  MultiThread-PHP  阅读(786)  评论(0)    收藏  举报