gpt4 book ai didi

php - 用尽用PHP的Curl套接字?

转载 作者:行者123 更新时间:2023-12-03 11:59:52 25 4
gpt4 key购买 nike

我正在使用PHP CLI脚本中的CURL库对服务器进行大量的API调用。

我注意到28,219个连接(依次打开/执行,而不是同时打开)后,curl失败。尝试的每个后续请求都将失败,直到大约30秒后。

据我所知,正在访问的API没有挂起或引起错误。我尝试通过访问不同的远程主机进行此操作,并且该错误始终发生,因此我怀疑问题出在PHP/Curl,而不是远程主机。

这是我制作的示例脚本,用于演示该问题:

try {
for ($i = 0; $i < 1000000; ++$i) {
get('https://example.org/'); // change me if you're going to run this
echo '.';
}
} catch (Exception $e) {
echo "Error happened on {$i} - {$e->getMessage()}";
}

function get($url) {
$curl = curl_init($url);

if (! $curl) {
throw new Exception('Error1 - Could not create new curl handle');
}

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);

$contents = curl_exec($curl);
$info = curl_getinfo($curl);

if ($errno = curl_errno($curl)) {
throw new Exception("Error2 " . curl_strerror($errno), $errno);
}

curl_close($curl);

if ($info['http_code'] === 200) {
return $contents;
}

throw new Exception("Error3", (int) $info['http_code']);
}

输出:

.........................................................................................................................................................................................................................................................................................................................................................Error happened on 28219 - Error2 Couldn't connect to server



我倾向于认为此错误正在发生,因为我已经用尽了可用的TCP套接字,但是我对它的工作方式还不十分了解,因此无法找到解决该问题的适当方法(发出更少的请求)。

编辑:

由于人们一直在建议它是远程服务器,因此这是围攻向我的测试服务器(带有API的服务器)发出1000000个请求的结果。我不是100%知道是什么原因导致了一次失败,但它只发生了一次,因此我将其视为异常,这与28,219个请求后我从CURL遇到的持续失败不同。
siege -c 1 -r 1000000 http://mytestserver/same/url/as/with/curl
* SIEGE 3.0.5
** Preparing 1 concurrent users for battle.
The server is now under siege...
The server is now under siege...[error] socket: -187603200 connection refused.: Connection refused

done.

Transactions: 999999 hits
Availability: 100.00 %
Elapsed time: 626.70 secs
Data transferred: 7719.03 MB
Response time: 0.00 secs
Transaction rate: 1595.66 trans/sec
Throughput: 12.32 MB/sec
Concurrency: 0.94
Successful transactions: 999999
Failed transactions: 1
Longest transaction: 0.14
Shortest transaction: 0.00

最佳答案

您在每次迭代中制作一个新的curl资源。如果您重新使用该连接,则所有操作均应按预期进行。初始化curl并循环传入curl变量

关于php - 用尽用PHP的Curl套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com