实现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 09 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
PHP新手入门学习方法
May 08 PHP
php购物车实现代码
Oct 10 PHP
PHP 观察者模式的实现代码
May 10 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
PHP借助phpmailer发送邮件
May 11 PHP
php商品对比功能代码分享
Sep 24 PHP
PHP实现linux命令tail -f
Feb 22 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 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
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
php类自动加载器实现方法
2015/07/28 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
golang实现php里的serialize()和unserialize()序列和反序列方法详解
2018/10/30 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
关于vue路由缓存清除在main.js中的设置
2019/11/06 Javascript
JS动态显示倒计时效果
2019/12/12 Javascript
springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)
2020/10/15 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python3 socket同步通信简单示例
2017/06/07 Python
带你认识Django
2019/01/15 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
T3官网:头发造型工具
2019/12/26 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
法学院方阵解说词
2014/01/29 职场文书
机关门卫制度
2014/02/01 职场文书
水知道答案观后感
2015/06/08 职场文书
个人工作决心书
2015/09/22 职场文书
导游词之青岛崂山
2019/12/27 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
MySQL分库分表详情
2021/09/25 MySQL