Как заставить мой скрипт непрерывно проверять переменную?


Извините, я не могу придумать лучшего слова для названия.

Я работаю над ботом PHP IRC. В настоящее время я использую цикл while fgets(..., чтобы он продолжал прослушивать данные и отвечать.

В какой-то момент, когда я спал, он фактически "пропинговался" и перестал получать данные без какого-либо сообщения об ошибке, которое я мог бы использовать для запуска перезапуска.

Я подумал о быстром решении, а именно о том, чтобы сохранить время, когда сервер в последний раз пинговал бота, и если оно превышает x секунд, повторно подключиться. Этот план отлично работает в теории, за исключением того, что эта проверка ping выполняется внутри цикла while fgets, поэтому он проверяет ее только при получении данных с IRC-сервера. Таким образом, если он просто перестанет получать данные с сервера, он не будет сравнивать время пинга и не перезапустится.

Я не могу придумать, как это обойти. Помочь?

Author: Rob, 2011-01-26

1 answers

Прежде всего, используйте stream_set_timeout(), чтобы установить время ожидания для (уже открытого) сокета на значение ниже, чем время ожидания пинга сервера.

Затем измените условие цикла на: while(fgets(...) || !$done) Когда вы не получите ответа, время ожидания fgets истечет, и вам, возможно, придется отключить предупреждение для этого. Но таким образом вы можете отправить что-то на сервер, чтобы он не отключил вас ДО того, как вы получите тайм-аут пинга. Просто измените флаг $done и установите его в значение true, когда вы действительно хотите отключитесь (как бы вы это ни делали).

Не уверен, что это сработает, но, вероятно, стоит попробовать.

Добавление: Я думал об условии выхода, вероятно, было бы лучше вручную выйти из while (используя break) вместо установки флага. Таким образом, вы можете изменить условие на while(fgets(...) || 1). В противном случае вы можете застрять в бесконечном цикле, когда сервер продолжает отправлять контент.

 3
Author: Manuel Strausz, 2011-01-26 16:37:49