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

时间:2016-10-31 12:20:21

标签: php curl long-polling

以下脚本将无限期运行,并将使用php myscript.php启动。

http://example.com/longpolling.php只有在与php myscript.php进行通信时才会响应,并且以下curl请求会在longpolling.php达到其时间限制之前超时。

我应该关闭并重新打开每个循环的卷曲连接,或者让它无限期地保持打开状态。

<?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?
}

2 个答案:

答案 0 :(得分:3)

如果URL位于同一服务器上,则重用句柄将导致性能提升。 cURL将为服务器的每个HTTP请求重用相同的TCP连接。

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

答案 1 :(得分:0)

您错过了退出条件。假设它是来自远程脚本的响应,那么您的代码应为:

<?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