实现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类
Nov 27 PHP
PHP 开源AJAX框架14种
Aug 24 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
PHP独立Session数据库存储操作类分享
Jun 11 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
php实现购物车功能(上)
Jul 23 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
win10环境PHP 7 安装配置【教程】
May 09 PHP
PHP递归算法的简单实例
Feb 28 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 PHP
PHP7 标准库修改
Mar 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
php xfocus防注入资料
2008/04/27 PHP
hessian 在PHP中的使用介绍
2010/12/13 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
移动设备web开发首选框架:zeptojs介绍
2015/01/29 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JQuery工具函数汇总
2015/06/15 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
详解Ubuntu安装angular-cli遇到的坑
2018/09/08 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
详解python 注释、变量、类型
2018/08/10 Python
python读写csv文件实例代码
2019/07/05 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
HTML5之SVG 2D入门8—文档结构及相关元素总结
2013/01/30 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
校园报刊亭创业计划书
2014/01/02 职场文书
户外活动策划方案
2014/03/12 职场文书
化学专业自荐信
2014/05/28 职场文书
个人委托书
2014/07/31 职场文书
消防志愿者活动方案
2014/08/23 职场文书
政府个人对照检查材料
2014/08/28 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
婚宴邀请函
2015/01/30 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书