[转帖]让您轻松实现PHP多线程异步请求的3种方法_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4400 | 回复: 0   主题: [转帖]让您轻松实现PHP多线程异步请求的3种方法        下一篇 
zhongwei.wang
注册用户
等级:中校
经验:1859
发帖:60
精华:1
注册:2013-12-23
状态:离线
发送短消息息给zhongwei.wang 加好友    发送短消息息给zhongwei.wang 发消息
发表于: IP:您无权察看 2013-12-27 10:30:34 | [全部帖] [楼主帖] 楼主

在网上看过很多版本的PHP异步请求方法,今天,在这里简单总结几个常用方法分享给大家

1、用CURL实现一步请求

CURL扩展是我们在开发过程中最常用的一种方法,他是一个强大的HTTP命令行工具,可以模拟POST/GET等HTTP请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。

示例:

1<?php
2$cl= curl_init();
3$curl_opt= array(CURLOPT_URL, 'http://www.tsingyuan.cn/demo.php',
4                            CURLOPT_RETURNTRANSFER, 1,
5                            CURLOPT_TIMEOUT, 1,);
6curl_setopt_array($cl, $curl_opt);
7curl_exec($ch);
8curl_close($ch);
9?>


由于CUROPT_TIMEOUT属性最小值为1,这就意味着在客户端必须等待1秒,这也是使用CURL方法的缺点

2、用popen()函数实现异步请求

语法格式:popen(command,mode)

示例:

1<?php
2$file= popen("/bin/ls","r");
3//这里是要执行的代码
4//...
5pclose($file);
6?>


popen()函数直接打开一个指向进程的管道,速度快,即时相应。但是这个函数是单项的,要么读要么写,而且如果并发数较大,则会产生大量进程,给服务器造成负担。

另外,如同示例中一样,程序结束后一定要用pclose()来关闭。

3、用fscokopen()函数实现异步请求

我们在平时开发邮件发送功能等socket编程时,都会用到这个函数,在使用这个函数之前,我们要在PHP.ini 中开启 allow_url_fopen 选项,另外在变成时,我们还要自己手动拼接出header部分。

示例:

01$fp= fsockopen("www.tsingyuan.cn/demo.php", 80, $errno, $errstr, 30);
02if(!$fp) {
      03echo"$errstr ($errno)\n";
04} else{
05$out= "GET /index.php / HTTP/1.1\r\n";
06$out.= "Host: www.tsingyuan.cn\r\n";
07$out.= "Connection: Close\r\n\r\n";
08
09fwrite($fp, $out);
10/*这里忽略执行结果

11*测试时可以打开

12while (!feof($fp)) {

13        echo fgets($fp, 128);

14}*/
15fclose($fp);
16}


PHP本身没有多线程,但是我们可以用其他方式来实现多线程的效果,上面列举的三种方式都有各自的优缺点,大家在使用时可以根据程序的需要择优选择。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论