Придумал тут один мой друг такую вот интересную штуку для своего блога: сбоку, рядом с контактной информацией, показывать данные о том, включен ли его компьютер в данный момент или нет (что-то вроде иконки ICQ для форума, которая загорается, когда человек в сети, и гаснет, когда он выходит). IP-адрес у него статичный, но он, тем не менее, пошел сначала каким-то извращенным путем и пытался заставить свой компьютер самостоятельно оповещать сервер хостинга, на котором располагается блог, о своем статусе. Нет, так, конечно, тоже можно, но это сложнее, так как по его схеме нужно было установить на компьютер http-сервер Apache с Cron и запускать скрипт, передающий при помощи GET-запроса статус компьютера, раз в пять минут. Хостинг, если он имеет какую-нибудь защиту от DDoS, элементарно может блокировать часто повторяющиеся запросы, поэтому это, на мой взгляд, не выход.
Сразу добавлю, что через несколько дней скрипт, который я ему написал, почему-то перестал работать. Позже выяснилось, что IP-адрес у него хоть и статичный, но время от времени меняется при помощи нажатия специальной кнопки в панели управления учетной записью абонента у провайдера, поэтому будем считать его динамическим и, соответственно, использовать DynDNS.
Итак, приступим. Для начала нам нужно таки установить на компьютере http-сервер. Любой. Apache для данной цели ― это сильно круто, поэтому лучше использовать nginx или lighttpd. Создаем какой-нибудь текстовый файл с содержанием «online» и публикуем его на сервере. Проверьте, чтобы фаервол не закрывал доступ к 80-тому порту извне. Открываем адрес нашего файла в браузере, используя домен DynDNS, и если на странице просто будет написано «online», то все хорошо.
Теперь переходим к стороне сервера хостинга. Здесь нужно сразу сделать выводы о посещаемости. Если к сайту обращаются раз в сутки, то запросы можно делать напрямую, если же это достаточно посещаемый сайт, то результаты лучше кешировать и обновлять, предположим, раз в пять минут. Можно обновлять при помощи задания Cron, а можно записывать дату последнего обновления и обновлять в том случае, если с момента последнего обновления уже прошло пять минут. Второй способ избавит нас от обновления информации в то время, когда на сайте никого нет и никому она не нужна.
Дальше все просто. При помощи скрипта на стороне сервера хостинга получаем содержимое файла, который мы разместили на своем домашнем сервере, после чего проверяем, имеется ли в нем «online». Если имеется, то выводим в блог сообщение о том, что автор нынче в сети. В случае же, если компьютер будет отключен, на наш запрос никто не ответит, поэтому время ожидания ответа не должно превышать 3-5 секунд, в противном же случае это приведет к зависанию страницы. И вообще механизм вывода сообщения о присутствии в сети лучше встраивать на страницу при помощи iframe, чтобы воспрепятствовать всяческим тормозам при загрузке страницы.
Вот как-то так мы и реализовали эту идею. Я знаю, что есть и другие способы, которые требуют меньшего времени и жертв, однако они нам не сильно подходили. Мой друг, к примеру, выходит в Интернет через роутер, поэтому просто отправить пинг на его адрес было бы глупо: по этому адресу пинги принимает роутер, благодаря чему мой друг числился бы в сети круглосуточно, если учитывать, что роутер он не отключает никогда. А так вообще, конечно, следовало бы использовать именно пинг, если бы компьютер был подключен напрямую к сети.