深入解析fsockopen与pfsockopen的区别


Posted in PHP onJuly 05, 2013

按手册上说,这两个函数的唯一区别是,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 />\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."<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
PHP 相关文章推荐
PHP 身份证号验证函数
May 07 PHP
通过PHP CLI实现简单的数据库实时监控调度
Jul 01 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
PHP实现操作redis的封装类完整实例
Nov 14 PHP
PHP7正式版测试,性能惊艳!
Dec 08 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
php微信公众号开发之音乐信息
Oct 20 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
tp5修改(实现即点即改)
Oct 18 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
PHP7 弃用功能
Mar 09 PHP
在windows平台上构建自己的PHP实现方法(仅适用于php5.2)
Jul 05 #PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 #PHP
php记录代码执行时间(实现代码)
Jul 05 #PHP
如何修改和添加Apache的默认站点目录
Jul 05 #PHP
解析php类的注册与自动加载
Jul 05 #PHP
php 注册时输入信息验证器的实现详解
Jul 05 #PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 #PHP
You might like
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
php对二维数组按指定键值key排序示例代码
2013/11/26 PHP
php文件读取方法实例分析
2015/06/20 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
onpropertypchange
2006/07/01 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
不定义JQuery插件 不要说会JQuery
2016/03/07 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
vue基本使用--refs获取组件或元素的实例
2019/11/07 Javascript
python实现图片九宫格分割
2021/03/07 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
如何使用python写截屏小工具
2020/09/29 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
复古服装:RetroStage
2019/05/10 全球购物
中介公司区域经理岗位职责范本
2014/03/02 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
务工证明怎么写
2015/06/18 职场文书
2016春季运动会前导词
2015/11/25 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
Nginx反向代理配置的全过程记录
2021/06/22 Servers
Sql Server之数据类型详解
2022/02/28 SQL Server