实现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下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
几款免费开源的不用数据库的php的cms
Dec 19 PHP
PHP中simplexml_load_string函数使用说明
Jan 01 PHP
五款常用mysql slow log分析工具的比较分析
May 22 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
php 操作调试的方法
Jul 12 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
May 12 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
php批量修改表结构实例
May 24 PHP
php生成二维码不保存服务器还有下载功能的实现代码
Aug 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通过header实现文本文件下载的代码
2010/08/08 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
使用flow来规范javascript的变量类型
2019/09/12 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python 字符串与数字输出方法
2018/07/16 Python
python获取array中指定元素的示例
2019/11/26 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
工业设计专业推荐信
2013/10/29 职场文书
家长给孩子的评语
2014/01/30 职场文书
党员入党表决心的话
2014/03/11 职场文书
导师就业推荐信范文
2014/05/22 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
交通安全温馨提示语
2015/07/14 职场文书
提档介绍信范文
2015/10/22 职场文书