Как заставить мой скрипт постоянно проверять переменную? - PullRequest
2 голосов
/ 26 января 2011

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

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

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

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

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

1 Ответ

3 голосов
/ 26 января 2011

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

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

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

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

...