目前我有一个系统可以向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脚本会在这里停止?
答案 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);
};
};
}
});