实现PHP多线程异步请求的3种方法


Posted in PHP onJanuary 17, 2014

在网上看过很多版本的PHP异步请求方法,这里简单总结几个常用方法分享给大家

1、用CURL实现一步请求

CURL扩展是我们在开发过程中最常用的一种方法,他是一个强大的HTTP命令行工具,可以模拟POST/GET等HTTP请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。

示例:

<?php 
$cl = curl_init(); 
$curl_opt = array(CURLOPT_URL, 'http://www.uncletoo.com/demo.php', 
CURLOPT_RETURNTRANSFER, 1, 
CURLOPT_TIMEOUT, 1,); 
curl_setopt_array($cl, $curl_opt); 
curl_exec($ch); 
curl_close($ch); 
?>

由于CUROPT_TIMEOUT属性最小值为1,这就意味着在客户端必须等待1秒,这也是使用CURL方法的缺点

2、用popen()函数实现异步请求

语法格式:popen(command,mode)

示例:

<?php 
$file = popen("/bin/ls","r"); 
//这里是要执行的代码 
//... 
pclose($file); 
?>

popen()函数直接打开一个指向进程的管道,速度快,即时相应。但是这个函数是单项的,要么读要么写,而且如果并发数较大,则会产生大量进程,给服务器造成负担。

另外,如同示例中一样,程序结束后一定要用pclose()来关闭。

3、用fscokopen()函数实现异步请求

我们在平时开发邮件发送功能等socket编程时,都会用到这个函数,在使用这个函数之前,我们要在PHP.ini 中开启 allow_url_fopen 选项,另外在变成时,我们还要自己手动拼接出header部分。

示例:

$fp = fsockopen("www.uncletoo.com/demo.php", 80, $errno, $errstr, 30); 
if (!$fp) { 
echo "$errstr ($errno)<br />\n"; 
} else { 
$out = "GET /index.php / HTTP/1.1\r\n"; 
$out .= "Host: www.uncletoo.com\r\n"; 
$out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); 
/*这里忽略执行结果 
*测试时可以打开 
while (!feof($fp)) { 
echo fgets($fp, 128); 
}*/ 
fclose($fp); 
}

PHP本身没有多线程,但是我们可以用其他方式来实现多线程的效果,上面列举的三种方式都有各自的优缺点,大家在使用时可以根据程序的需要择优选择。

UncleToo经验尚浅,这里就简单总结了这么多,如果有其他更好的实现PHP多线程的方法可以一起讨论!

PHP 相关文章推荐
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
php session 预定义数组
Mar 16 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
session 加入redis的实现代码
Jul 15 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
laravel 多图上传及图片的存储例子
Oct 14 PHP
关于laravel 子查询 &amp; join的使用
Oct 16 PHP
一个PHP二维数组排序的函数分享
Jan 17 #PHP
PHP登陆后跳转到登陆前页面实现思路及代码
Jan 17 #PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 #PHP
php使用curl访问https示例分享
Jan 17 #PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 #PHP
php 检查电子邮件函数(自写)
Jan 16 #PHP
php mail to 配置详解
Jan 16 #PHP
You might like
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
PHP+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
php微信公众号开发之校园图书馆
2018/10/20 PHP
DOM 中的事件处理介绍
2012/01/18 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
python+matplotlib绘制3D条形图实例代码
2018/01/17 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
Python日期时间对象转换为字符串的实例
2018/06/22 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
群众路线自我剖析及整改措施
2014/11/04 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
工作证明格式范文
2015/06/15 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书