一般在php进行请求url的时候,直接用 fopen 函数就可以搞定了,比如像这样:

$file=fopen("http://www.cnblogs.com","r") or exit("");
$ret=""; while (!feof($file)){
$ret=$ret.fgetc($file);
}
fclose($file); echo $ret;

当然,也可以直接用 socket 方式,自己定义好http头参数手动实现:

$host="www.cnblogs.com";
$port=80; $content="GET / HTTP/1.1\r\n".
"Accept: */*\r\n".
"Connection: Keep-Alive\r\n".
"Host: $host"; $fp = fsockopen($host, $port, $errno, $errstr, 30);
if ($fp) {
fwrite($fp, $content);
while (!feof($fp)) {
$ret.=fgets($fp, 128);
}
fclose($fp);
}
echo $ret;

但这些请求方式都是阻塞的,如果需要同时进行多请求的话,就得借助于curl了。

其实php下可以有两种方式使用curl,一种是直接用exec函数调用命令式的curl,这个没什么多说的,跟直接命令使用没什么区别,只是被放在php里调用了而已。

php自己也对 curl 进行了包装,这里我们需要使用到 curl_multi_ 的一些方法实现:

function curl_multi_request ($query_arr) {
$ch = curl_multi_init();
$count = count($query_arr);
$ch_arr = array();
for ($i = 0; $i < $count; $i++) {
$query_string = $query_arr[$i];
$ch_arr[$i] = curl_init($query_string);
curl_setopt($ch_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($ch, $ch_arr[$i]);
}
$running = null;
do {
curl_multi_exec($ch, $running);
} while ($running > 0);
for ($i = 0; $i < $count; $i++) {
$results[$i] = curl_multi_getcontent($ch_arr[$i]);
curl_multi_remove_handle($ch, $ch_arr[$i]);
}
curl_multi_close($ch);
return $results;
}

核心就是循环地调用 curl_multi_exec 方法来并发地进行url请求即可。

谢谢。

php并发请求的更多相关文章

  1. 如何配置IIS处理多并发请求及存在的问题

    很多时候多线程能快速高效独立的计算数据,应用比较多. 但今天遇到的多进程下的问题更是让人觉得复杂 多进程下static变量都要失效,就目前的平台和产品static使用是很多的,各种session.ca ...

  2. 查看 Apache并发请求数及其TCP连接状态

    查看 Apache并发请求数及其TCP连接状态 (2011-06-27 15:08:36) 服务器上的一些统计数据: 1)统计80端口连接数 netstat -nat|grep -i "80 ...

  3. 查看 并发请求数及其TCP连接状态【转】

    服务器上的一些统计数据: 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议连接数ps -ef|grep httpd|wc ...

  4. IIS处理并发请求时出现的问题及解决

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响 应,系统基本处于不可用状态.因经验不足,花了很多时间精力解决这 ...

  5. Web大规模高并发请求和抢购的解决方案

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  6. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求

    原文:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  7. [转]让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求

    本文转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error S ...

  8. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转载)

    转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  9. 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)

    问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...

  10. Jexus 高并发请求的优化技巧 笔记

    Jexus web server 5.1 每个工作进程的最大并发数固定为1万,最多可以同时开启4个工作进程,因此,每台Jexus V5.1服务器最多可以到支持4万个并发连接.但是,按照linux系统的 ...

随机推荐

  1. linux timezone

    首先需要了解下“UTC时间”与“本地时间”UTC时间:世界协调时间(又称世界标准时间.世界统一时间),在一般精度要求下,它与GMT(Greenwich Mean Time,格林威治标准时间)是一样的, ...

  2. LeetCode题解-----Majority Element II 摩尔投票法

    题目描述: Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The a ...

  3. Jenkins遇到问题三:调整jdk版本不生效的解决办法

    由于项目统一环境的需要,需要将jdk版本从1.7降到1.6,通过修改“系统管理”菜单下的“系统设置”下的jdk环境变量: 将红圈中的路径修改为jdk6,如图所示:保存退出:发现通过”读取设置“和重启j ...

  4. java 11-8 在大串中查找小串的案例

    1.统计大串中小串出现的次数 举例: 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun& ...

  5. 关于 app测试工具

    1. 腾讯的GT 2. testin 云测 3. monkey的自动化测试 4. 纯手工的功能测试.

  6. Java基础详解 (一)Java的类成员访问权限修饰词(以及类访问权限)

    在一个类的内部,其成员(包括成员变量和成员函数)能否被其他类所访问,取决于该成员的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下),protected和public.其权 ...

  7. Jython概要

    1.安装jython 1.1 进入http://www.jython.org/downloads.html ,网页上会显示当前最稳定的版本(The most current stable releas ...

  8. POJ 1002 487-3279

    A - 487-3279 Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit ...

  9. 025医疗项目-模块二:药品目录的导入导出-HSSF导入类的封装

    上一篇文章提过,HSSF的用户模式会导致读取海量数据时很慢,所以我们采用的是事件驱动模式.这个模式类似于xml的sax解析.需要实现一个接口,HSSFListener接口. 原理:根据excel底层存 ...

  10. Mac 使用SSH远程登录

    一.打开ssh Mac Terminal是自带SSH的,可以用whereis来看看: $ whereis ssh 但是在现有进程中找不到ssh对应的进程: $ ps aux | grep ssh ap ...