You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求优化Facebook自动关注的Curl批量请求执行速度

优化Facebook自动关注Curl请求的执行速度

看起来你这段循环调用Curl的代码慢主要是因为每次请求都重复创建、销毁Curl句柄,并且逐个串行发起请求,加上数据库逐行查询的额外开销,导致整体效率很低。下面给你几个针对性的优化方案,从易到难逐步提升速度:

1. 复用Curl句柄(最易实现的优化)

原代码里每次调用auto()函数都会新建一个Curl句柄,请求完成后立刻关闭——这意味着每次请求都要重新建立TCP连接、完成SSL握手,这是非常耗时的重复操作。我们可以只创建一次Curl句柄,在循环中复用它,仅修改必要的URL参数:

// 先一次性把所有token查询出来,减少数据库交互次数
$tokens = [];
$result = mysql_query($laytoken); // 假设$laytoken是你的查询语句
while ($row = mysql_fetch_assoc($result)) {
    $tokens[] = $row['token'];
}

// 初始化一次Curl句柄,配置通用选项
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// 添加超时设置,避免请求卡住拖慢整体速度
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
// 开启持久连接,复用TCP连接减少握手开销
curl_setopt($curl, CURLOPT_KEEPALIVE, true);
curl_setopt($curl, CURLOPT_TCP_KEEPIDLE, 10);
curl_setopt($curl, CURLOPT_TCP_KEEPINTVL, 10);

// 循环处理每个token
$targetId = $_POST['idfb'];
foreach ($tokens as $token) {
    $url = "https://graph.facebook.com/{$targetId}/subscribers?access_token={$token}&method=post";
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_exec($curl);
    // 可选:添加错误检查,跳过失败请求
    // if (curl_error($curl)) { /* 处理错误 */ }
}

// 最后统一关闭句柄
curl_close($curl);

header('Location: dash.php?i=4');

2. 使用Curl Multi批量并行请求(进阶优化,速度提升最明显)

如果你的token数量较多,串行处理还是会浪费大量等待服务器响应的时间。用Curl Multi可以同时发起多个请求,并行执行,把等待时间充分利用起来:

// 一次性获取所有token
$tokens = [];
$result = mysql_query($laytoken);
while ($row = mysql_fetch_assoc($result)) {
    $tokens[] = $row['token'];
}

$targetId = $_POST['idfb'];
$mh = curl_multi_init();
$handles = [];

// 批量创建Curl句柄并添加到Multi句柄
foreach ($tokens as $index => $token) {
    $url = "https://graph.facebook.com/{$targetId}/subscribers?access_token={$token}&method=post";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_multi_add_handle($mh, $ch);
    $handles[$index] = $ch;
}

// 执行批量并行请求
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh); // 等待活动连接,降低CPU占用
} while ($running > 0);

// 统一清理句柄
foreach ($handles as $ch) {
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}
curl_multi_close($mh);

header('Location: dash.php?i=4');

3. 额外优化建议

  • 替换过时的mysql扩展:你当前使用的mysql_*函数已被PHP废弃,不仅存在安全隐患,性能也不如mysqli或PDO。建议换成mysqli的fetch_all或PDO的批量查询,进一步提升数据库读取效率。
  • 控制并发数量:如果token数量极多,不要一次性发起所有请求——可能会触发Facebook的API频率限制,或耗尽服务器资源。可以把token分成批次,比如每次处理10-20个,分批执行。
  • 添加错误处理:原代码没有处理请求失败的情况,优化后可以加入curl_error()检查请求状态,跳过无效请求避免浪费时间。

注意:Facebook的Graph API有严格的请求频率限制,过度并发可能导致账号或API被临时限制,建议根据官方文档控制请求速率。

内容的提问来源于stack exchange,提问作者Võ Hữu Nhân

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:50:52