实现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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php 生成文字png图片的代码
Apr 17 PHP
简单实现限定phpmyadmin访问ip的方法
Mar 05 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php树型类实例
Dec 05 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
支持png透明图片的php生成缩略图类分享
Feb 08 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
两种php实现图片上传的方法
Jan 22 PHP
php HTML无刷新提交表单
Apr 05 PHP
thinkPHP2.1自定义标签库的导入方法详解
Jul 20 PHP
Laravel框架中Blade模板的用法示例
Aug 30 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
世界收音机发展史
2021/03/01 无线电
php&amp;mysql 日期操作小记
2012/02/27 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
jquery实现手风琴效果
2015/11/20 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
2015/11/26 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
从零开始最小实现react服务器渲染详解
2018/01/26 Javascript
详解vue-cli3使用
2018/08/14 Javascript
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
js实现黑白div块画空心的图形
2018/12/13 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
小程序接入腾讯位置服务的详细流程
2020/03/03 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
python list格式数据excel导出方法
2018/10/31 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
浅谈PyTorch中in-place operation的含义
2020/06/27 Python
实现Python3数组旋转的3种算法实例
2020/09/16 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
创先争优标语
2014/06/27 职场文书
少年犯观后感
2015/06/11 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
win10电脑双屏显示一个黑屏怎么办?win10电脑双屏显示一个黑屏解决方法
2022/07/15 数码科技