zoukankan      html  css  js  c++  java
  • PHP Socket编程 之 深入解析fsockopen与pfsockopen的区别

    按手册上说,这两个函数的唯一区别是,pfsockopen是持续连接,而fsockopen不是.

    我写了个代码了一下:

    <?php
    $data="1,0,721,73,1,0,0,43290000,0,60D81D509BC00451,3,FFFFFFFF";
    //http://10.144.99.114/SANEX_NEW/modules/subscribemanager/test.php
    $host = '127.0.0.1';
    $url = "/aa.php";
    $pffirst = false;
    $times = 1000;
    $startTime = microtime(true);
    for ($index = 0; $index < $times; $index++) {
     echo httpPost($host,$url,$data,$pffirst)."<hr><br />";
    }
    $middleTime = microtime(true);
    for ($index = 0; $index < $times; $index++) {
     echo httpPost($host,$url,$data,!$pffirst)."<hr><br />";;
    }
    $endTime = microtime(true);
     echo ($pffirst?"pfsocket":"fsocket").":".($middleTime-$startTime);
     echo "<br />";
     echo ($pffirst?"fsocket":"pfsocket").":".($endTime-$middleTime);
    
    $count=0;
    //发包函数
    function httpPost($host,$url,$data,$p)
    {
    global $count;
     $func = $p?"pfsockopen":"fsockopen";
    
     $conn = $func($host,80,$errno, $errstr, 30);
     if (!$conn)
     {
      echo "$errstr ($errno)<br />
    ";
      return;
     }
    
     $header = "POST ".$url." HTTP/1.1
    ";
     $header.= "Host : {$host}
    ";
     $header.= "Content-type: application/x-www-form-urlencoded
    ";
     $header.= "Content-Length:".strlen($data)."
    ";
     $header.= "Connection: Keep-Alive
    
    "; 
     $header.= "{$data}
    
    ";
    
     fwrite($conn,$header);
    
     $count++;
     echo $count.' '.$header."<br /><br />";
    
     $resp='';
     //while (!feof($conn)) {
     // $resp .= fgets($conn);
     //}
     //fclose($conn);
     return $resp;
    }
    ?>

    结果发现:
    代码的倒数第二行,如果把//fclose($conn);注释掉,结果是:
    fsocket:11.04693198204
    pfsocket:0.34867787361145

    如果不注释:
    fsocket:12.509312152863
    pfsocket:11.120275974274
    可以看出,fsocketopen默认每次处理结束后,就算协议头是Keep-Alive,连接仍然断掉了.
    而pfsocketopen在Keep-Alive条件下,连接可以被下一次重复利用.
    一次连接发送大量数据时,推荐使用pfsocketopen

  • 相关阅读:
    Bookmarks_www2
    Linux系统各发行版镜像下载(持续更新)
    tiny-rtems-src
    rtems-os-source
    OpenRCT2-ext
    PAT甲级1004题解——并查集思想改
    PAT甲级1008水题飘过
    PAT甲级1007题解——贪心
    PAT甲级1006水题飘过
    PAT甲级1005水题飘过
  • 原文地址:https://www.cnblogs.com/7qin/p/13298658.html
Copyright © 2011-2022 走看看