实现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 相关文章推荐
php图片缩放实现方法
Feb 20 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
smarty中js的调用方法示例
Oct 27 PHP
php学习笔记之基础知识
Nov 08 PHP
PHP实现采集抓取淘宝网单个商品信息
Jan 08 PHP
编写PHP程序检查字符串中的中文字符个数的实例分享
Mar 17 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
php将html转为图片的实现方法
May 19 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
如何在PHP环境中使用ProtoBuf数据格式
Jun 19 PHP
PHP7移除的扩展和SAPI
Mar 09 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
php正则表达式(regar expression)
2011/09/10 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
javascript从定义到执行 你不知道的那些事
2016/01/04 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
在Windows8上的搭建Python和Django环境
2014/07/03 Python
python中zip()方法应用实例分析
2016/04/16 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
深入理解Python对Json的解析
2017/02/14 Python
python 连接sqlite及简单操作
2017/06/30 Python
python模仿网页版微信发送消息功能
2018/02/24 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
综合素质的自我鉴定
2013/10/07 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
运动会邀请函范文
2014/01/31 职场文书
医院检讨书范文
2014/02/01 职场文书
烹饪大赛策划方案
2014/05/26 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
2014年基建工作总结
2014/12/12 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
匿名信格式范文
2015/05/27 职场文书
九年级数学教学反思
2016/02/17 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书