实现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学习之流程控制实现代码
Jun 09 PHP
PHP 字符串正则替换函数preg_replace使用说明
Jul 15 PHP
php笔记之:php数组相关函数的使用
Apr 26 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
Yii实现显示静态页的方法
Apr 25 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
thinkPHP5.0框架独立配置与动态配置方法
Mar 17 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
Oct 14 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字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
php中关于换行的实例写法
2019/09/26 PHP
jquery实现文本框数量加减功能的例子分享
2014/05/10 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
python比较两个列表大小的方法
2015/07/11 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Python列表如何更新值
2020/05/27 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
TUMI马来西亚官方网站:国际领先的高品质商旅箱包品牌
2018/04/26 全球购物
UDP协议功能
2013/01/06 面试题
党支部综合考察材料
2014/05/19 职场文书
小学运动会口号
2014/06/07 职场文书
公司授权委托书
2014/10/17 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
新郎答谢词
2015/01/04 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
Pytorch中Softmax与LogSigmoid的对比分析
2021/06/05 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
vue实现Toast组件轻提示
2022/04/10 Vue.js
Tomcat配置访问日志和线程数
2022/05/06 Servers