У меня есть PHP-скрипт, который подключается к Express (Node) под управлением setInterval
,
Доступ к нему осуществляется через cUrl, поэтому он будет выглядеть примерно так:
$status = curl(http://example.com/status?id=xyz);
$status = json_decode(status, true);
if ($status[success] == true) {
//Do stuff here
}
Экспресс принимает запрос следующим образом:
app.get('/status/', function (req, res) {
var id = req.query['id'];
var statusInterval = setInterval(getStatus, 30 * 1000)
var statusTimeout = setTimeout(function() { //Clears Interval after 15m
clearInterval(statusInterval)
}, 15 * 60 * 1000);
});
однако через 2 минуты соединение случайно падает и else
выполняется
настройка max_execution_time
в PHP.ini до 600 (10 минут) не помогли, и не помогли CURLOPT_TIMEOUT
или же CURLOPT_CONNECTTIMEOUT
,
Оказывается, то, что предложил Ив, было правильным — хотя оно и не было должным образом упомянуто ранее в документах, есть экспресс-тайм-аут, установленный экспрессом, который закрывает соединения через 120 секунд, через setTimeout
,
Чтобы предотвратить это, просто аннулируйте тайм-аут, добавив
res.connection.setTimeout(0);
к вашей функции.
Проблема описана — более подробно — на https://contourline.wordpress.com/2011/03/30/preventing-server-timeout-in-node-js/
Других решений пока нет …