• 技术文章 >php教程 >php手册

    深入解析fsockopen与pfsockopen的区别

    2016-06-13 11:42:51原创762
    按手册上说,这两个函数的唯一区别是,pfsockopen是持续连接,而fsockopen不是.
    我写了个代码了一下:

    复制代码 代码如下:


    $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)."



    ";
    }
    $middleTime = microtime(true);
    for ($index = 0; $index < $times; $index++) {
    echo httpPost($host,$url,$data,!$pffirst)."

    ";;
    }
    $endTime = microtime(true);
    echo ($pffirst?"pfsocket":"fsocket").":".($middleTime-$startTime);
    echo "
    ";
    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)
    \n";
    return;
    }

    $header = "POST ".$url." HTTP/1.1\r\n";
    $header.= "Host : {$host}\r\n";
    $header.= "Content-type: application/x-www-form-urlencoded\r\n";
    $header.= "Content-Length:".strlen($data)."\r\n";
    $header.= "Connection: Keep-Alive\r\n\r\n";
    $header.= "{$data}\r\n\r\n";

    fwrite($conn,$header);

    $count++;
    echo $count.' '.$header."

    ";

    $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
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:如何利用PHP执行.SQL文件 下一篇:解析PHP中$_FILES的使用以及注意事项
    Web大前端开发直播班

    相关文章推荐

    • 深入理解PHP中的匿名函数• PHP网站性能分析• PHP输入流input简介• 一天学会PHP~!• Php 生成静态html文件

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网