实现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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
ajax php 实现写入数据库
Sep 02 PHP
php self,$this,const,static,-&amp;gt;的使用
Oct 22 PHP
网页游戏开发入门教程三(简单程序应用)
Nov 02 PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
php类的定义与继承用法实例
Jul 07 PHP
PHP使用缓存即时输出内容(output buffering)的方法
Aug 03 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
php 文章调用类代码
2011/08/11 PHP
php中smarty区域循环的方法
2015/06/11 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
2015/09/20 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP laravel中的多对多关系实例详解
2017/06/07 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
JavaScript类和继承 this属性使用说明
2010/09/03 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
2013/01/16 Javascript
给ListBox添加双击事件示例代码
2013/12/02 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
前端vue如何使用高德地图
2020/11/05 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
体育教育专业自荐信范文
2013/12/20 职场文书
国情备忘录观后感
2015/06/04 职场文书
2016年感恩节寄语
2015/12/07 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
python编写五子棋游戏
2021/05/25 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android
使用CSS实现小三角边框原理解析
2021/11/07 HTML / CSS
Minikube搭建Kubernetes集群
2022/03/31 Servers
Python之matplotlib绘制折线图
2022/04/13 Python
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
MySQL数据库查询之多表查询总结
2022/08/05 MySQL