什么时候应该使用 curl_close() ?

When should curl_close() be used?

下面的脚本将无限期地运行,并将使用 php myscript.php.

启动

http://example.com/longpolling.php 只有在有内容要与 php myscript.php 通信时才会响应,下面的 curl 请求将在 longpolling.php 达到其时间限制之前超时。

我应该在每个循环中关闭并重新打开 curl 连接,还是让它无限期地打开。

<?php
// php myscript.php
$options=[
    CURLOPT_URL=>'http://example.com/longpolling.php',
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_CONNECTTIMEOUT => 300,
    CURLOPT_TIMEOUT=> 300
];
$ch      = curl_init();
curl_setopt_array( $ch, $options );
while (true) {
    $rsp = curl_exec( $ch );
    // Do something
    //curl_close( $ch );    //should I close and reopen?
}

您缺少退出条件。假设它是来自远程脚本的响应,您的代码应该是:

<?php
// php myscript.php
$options=[
    CURLOPT_URL=>'http://example.com/longpolling.php',
    CURLOPT_RETURNTRANSFER=>true,
    CURLOPT_CONNECTTIMEOUT => 300,
    CURLOPT_TIMEOUT=> 300
];
$ch      = curl_init();
curl_setopt_array( $ch, $options );
$rsp = false;
while (!$rsp) {
    $rsp = curl_exec( $ch );
} 
curl_close( $ch );   
// Do something

如果 URL 在同一台服务器上,重复使用句柄将提高性能。 cURL 将为对服务器的每个 HTTP 请求重用相同的 TCP 连接。

Here 也是这个问题的一个很好的基准。