实现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 相关文章推荐
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
PHP goto语句简介和使用实例
Mar 11 PHP
让CodeIgniter的ellipsize()支持中文截断的方法
Jun 12 PHP
php通过递归方式复制目录和子目录的方法
Mar 13 PHP
php抓取并保存网站图片的实现代码
Oct 28 PHP
是 WordPress 让 PHP 更流行了 而不是框架
Feb 03 PHP
Zend Framework教程之模型Model基本规则和使用方法
Mar 04 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
laravel中数据显示方法(默认值和下拉option默认选中)
Oct 11 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
解析smarty模板中类似for的功能实现
2013/06/18 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
2016/10/08 PHP
prototype 的说明 js类
2006/09/07 Javascript
javascript String 对象
2008/04/25 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
python将ip地址转换成整数的方法
2015/03/17 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
新员工欢迎词
2014/01/12 职场文书
护士进修自我鉴定
2014/02/07 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
三方合作协议书范本
2014/04/18 职场文书
生日庆典策划方案
2014/06/02 职场文书
拓展训练激励口号
2014/06/17 职场文书
责任书范本
2014/08/25 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
关于迟到的检讨书
2015/05/06 职场文书
写给同事的离职感言
2015/08/04 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书