Есть ip, который постоянно (каждые 5 секунд), отвечает в виде потока. Это камера, которая информирует о новых видео. Функция writer поддерживает эти ответы, а handler обрабатывает ответ. Мне нужно, чтобы этот запрос выполнялся вечно, однако в какой-то момент, как, к примеру, сейчас, камера может перестать вообще отвечать. Свет выключили либо ещё что-то случилось, но сейчас я не могу обратиться по ip. В обычном состоянии камера постоянно отвечает:
--myboundary
Content-Type: text/plain
Content-Length: 9
Heartbeat
Что означает, что новых видео нет. На данных момент логах у меня зафиксировано последнее время и ответ, когда запустился writer и всё.
Как мне можно установить какой-нибудь ограничитель, чтобы он срабатывал в случае если ответа нет в течении условных 20 секунд? По сути, за это отвечает TIMEOUT, однако скрипт перестанет выполняться через 20 секунд, даже если ответы во writer были, поэтому сейчас установлен 0. Нужен другой ограничитель.
function writer($ch, $data) {
handler($data);
return strlen($data);
}
$ch = curl_init("$urlcam/cgi-bin/eventManager.cgi?action=attach&codes=[NewFile]&heartbeat=5");
curl_setopt_array($ch, [
CURLOPT_USERPWD => "$user:$pass",
CURLOPT_CONNECTTIMEOUT => 20,
CURLOPT_TIMEOUT => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_HTTPAUTH=>CURLAUTH_DIGEST,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_WRITEFUNCTION => 'writer'
]);
$result = curl_exec($ch);
curl_close($ch);