PHP对REST API停顿的多个cURL请求

时间:2015-06-18 11:50:19

标签: php rest cakephp curl

目前我有一个系统可以向REST API发送多个请求。它的结构是这样的:

foreach ($data as $d)
{
    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_HTTPHEADER, (array of data here));
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);
    $response = curl_exec( $ch );
    $retry = 0;
    while((curl_errno($ch) == 7 || curl_errno($ch) == 52) && $retry < 3)
    {
        $response = curl_exec($ch);
        $retry++;
    }
    curl_close($ch);
    (decode XML Response and loop)
}

(我无法公开整个代码,所以我填写了在括号内发生的操作)

然而,在几百次请求之后,FastCGI脚本停止了。如果我以其他方式查询REST API,REST API仍将在此期间响应,但此批处理客户端将不再发送请求。几分钟后,它将再次开始响应。我不知道为什么这会停滞不前,我可以通过htop看到两端的线程都没有CPU活动,而这种情况正在发生。

有没有理由说cURL / PHP脚本会在这里停止?

1 个答案:

答案 0 :(得分:3)

如果您允许使用外部PHP库; 我想建议这种方法: https://github.com/php-curl-class/php-curl-class

var callback = function(username) {
     // Do something with username here
     console.log(username);
}

 $.ajax({
         dataType: 'json',
         url: 'example.com',
         type: 'POST',
         success: function (data) {
           for (var i = 0; i < data.users.length; i++) {
             if (user_id == data.users[i].id) {

                    var username = data.users[i].username;
                    // call the callback
                    callback(username);

                    };
                };
            }
        });