实现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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
php中在PDO中使用事务(Transaction)
May 14 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
使用PHP导出Word文档的原理和实例
Oct 21 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
Sep 28 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
Laravel 5框架学习之向视图传送数据
Apr 08 PHP
Thinkphp+smarty+uploadify实现无刷新上传
Jul 30 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
PHP中利用sleep函数实现定时执行功能实现代码
Aug 25 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
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
php实现的ping端口函数实例
2014/11/12 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
Javascript调用C#代码
2011/01/17 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
mpvue写一个CPASS小程序的示例
2018/09/04 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python常用模块用法分析
2014/09/08 Python
python实现telnet客户端的方法
2015/04/15 Python
python压缩文件夹内所有文件为zip文件的方法
2015/06/20 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
基于pytorch的lstm参数使用详解
2020/01/14 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
2020/02/28 Python
python中append函数用法讲解
2020/12/11 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
项目委托协议书(最新)
2014/09/13 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
教师岗位职责范本
2015/04/02 职场文书
财务部岗位职责范本
2015/04/14 职场文书
行政经理岗位职责
2015/04/15 职场文书
2016中秋节问候语
2015/11/11 职场文书
2016年教代会开幕词
2016/03/04 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js