php并发请求
一般在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请求即可。
谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器