实现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
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
深入PHP autoload机制的详解
Jun 09 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
Apr 30 PHP
php 使用array函数实现分页
Feb 13 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 PHP
PHP反射原理与用法深入分析
Sep 28 PHP
禁止直接访问php文件代码分享
May 05 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
第二节 对象模型 [2]
2006/10/09 PHP
用PHP 4.2书写安全的脚本
2006/10/09 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jquery.cookie.js 操作cookie实现记住密码功能的实现代码
2011/04/27 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
使用JavaScript实现弹出层效果的简单实例
2016/05/31 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
Vue3 响应式侦听与计算的实现
2020/11/11 Javascript
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python验证码识别的实例详解
2016/09/09 Python
Python可变参数用法实例分析
2017/04/02 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Python 加密的实例详解
2017/10/09 Python
详解Python如何生成词云的方法
2018/06/01 Python
python 常用的基础函数
2018/07/10 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Django异步任务线程池实现原理
2019/12/17 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
如何完美的建立一个python项目
2020/10/09 Python
canvas中普通动效与粒子动效的实现代码示例
2019/01/03 HTML / CSS
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
银行求职推荐信范文
2013/11/30 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript