Обнаружить неисправность сети? - PullRequest
0 голосов
/ 15 июня 2011

В моем PHP-скрипте я запускаю цикл, который я хочу разорвать, если соединение с клиентом прерывается.

Работает нормально, когда пользователь нажимает кнопку остановки (базовое трехстороннее рукопожатие),но не в том случае, если у пользователя есть проблемы с сетью (проблемы с wifi-соединением).

Цикл все еще работает, даже если соединение прерывается из-за проблем с сетью.

Мой код:

<?php
while (1) {
    Echo "\n";
    ob_flush();
    flush();
    if (connection_status() != CONNECTION_NORMAL) {
        break;
    }
    // update database
    sleep(1);
}
?>

Так, как я могу разорвать цикл?Я искал много досок, но не нашёл ни одной подсказки.Я также безуспешно пытался «HTTP Keep Alive».

1 Ответ

0 голосов
/ 15 июня 2011

Предполагая PHP5, ваше соединение ввода-вывода должно выдавать исключение о состоянии соединения, или истечь тайм-аут, или иным образом иметь возможность уведомить вас об этом.Вы обрабатываете исключение и переходите оттуда.

Если вы ищете общесистемное уведомление (аналогично тому, как это делает Android, чтобы приложения знали, что состояние сети изменилось), я не понимаюне думаю, что есть такая вещь.

Итак, вам нужно обернуть свой код для чтения / записи в блок try / catch , чтобы он уведомлял вас в случае возникновения проблемы, исправиться с ситуацией в секции catch.Проверьте документы для класса / объекта, который вы используете для чтения / записи, и посмотрите, если / когда он вызывает исключения.Он может генерировать только общую ошибку ввода-вывода, когда сетевое соединение потеряно.Во многих случаях этого достаточно, так как обычно все, что вас волнует, - можете ли вы отправлять пакеты данных, а не обязательно «почему».Вы можете использовать эту информацию для создания базовой функции повтора или для подсказки пользователю, что он хочет с этим сделать.

...