实现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 25 PHP
php xml留言板 xml存储数据的简单例子
Aug 24 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php过滤XSS攻击的函数
Nov 12 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
Jul 04 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
Sep 03 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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 INI配置文件的解析实现分析
2011/01/04 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
2020/10/20 PHP
javascript 禁止复制网页
2009/06/11 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
JavaScript中常见的字符串操作函数及用法汇总
2015/05/04 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
javascript 广告移动特效的实现代码
2016/06/25 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
Node.js的特点详解
2017/02/03 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
在vue中安装使用vux的教程详解
2018/09/16 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
python使用Turtle库绘制动态钟表
2018/11/19 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
如何通过命令行进入python
2020/07/06 Python
Python3使用 GitLab API 进行批量合并分支
2020/10/15 Python
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
如何撰写岗位职责
2014/02/01 职场文书
初三学习决心书
2014/03/11 职场文书
献爱心标语
2014/06/21 职场文书
幼儿园中班区域活动总结
2014/07/09 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle