Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Проверка статуса доступности компьютера (Leon-Killer22)
Author Message
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Wed Oct 15, 2008 12:49 pm (написано за 2 секунды)
   Post subject: Проверка статуса доступности компьютера
Reply with quote

Добрый день всем.

Ситуация следующая...

У меня дома компьютер с внешним IP. На нем установлен Апач и висит сайт.

Есть два доменных имени - одно из них привязано к моему IP, а другой - к хостинг-провайдеру, где находится почти такой же сайт.

Проблема: компьютер не может постоянно "пыхтеть" (возможно он подвиснет или провайдера заглючит).

Идея следующая...

Я подумал, что можно будет создать простенький сайт на другом хостинге (можно даже народ.ру) состоящий из двух хтмл-файлов (один будет включать два фрейма: один фрейм со криптом, а второй - с сайтом на моей машине).

Теперь опишу сам скрипт. Предположим, у меня есть зеркало (просто копия) моего сайта на локальной машине, который находится где-то в интернете, на каком-то шаровом хостинге. Так вот, скрипт должен как-то выдавать статус "Основной сервер работает" или "Основной сервер не работает". И рядом написано "Если основной сервер не работает, пожалуйста, пройдите по ссылке "..........".

Как же сделать этот скрипт?

Была у меня идея вот так (все действия изложены последовательно):

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

Может, написано бредово. Но я это вижу приблизительно так. Было бы неплохо сделать это именно на JS, но и с PHp было бы нелохо повозиться.
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Wed Oct 15, 2008 3:17 pm (спустя 2 часа 27 минут; написано за 1 минуту 4 секунды)
   Post subject:
Reply with quote

Quote:
Но я это вижу приблизительно так
реализововать свое видинее пробовали? возникли сложности? какие?
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Wed Oct 15, 2008 3:53 pm (спустя 36 минут; написано за 50 секунд)
   Post subject:
Reply with quote

Leon-Killer22,
я вам подскажу.

Тут нужно XMLHttpRequest юзать!

Там нужно будет обратиться к страничке, если status 200, значит комп онлайн.
Back to top
View user's profile Send private message Send e-mail
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Wed Oct 15, 2008 4:11 pm (спустя 17 минут; написано за 6 минут 29 секунд)
   Post subject:
Reply with quote

dimagolov - честно говоря не пробовал вообще - это лишь теория.

Дело в том. что я даже не знаю, как нужные мне функции обозначить.

Постараюсь сделать так, как вижу я (пишу неграмотно,):
Code (JavaScript): скопировать код в буфер обмена
span class="st0">" "" ".
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Wed Oct 15, 2008 6:18 pm (спустя 2 часа 7 минут; написано за 2 минуты 8 секунд)
   Post subject:
Reply with quote

Leon-Killer22, если мне что-то нужно сделать, то я в начале думаю как это можно реализовать, а как придумал, то беру и реализовываю и пробую на практике. если возникают проблемы, то выясняю в чем причины. если причины в несостоятельности моей идеи, то я ищу другие идеи, возможно, на форуме.
что я делаю неправильно?
Back to top
View user's profile Send private message
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Wed Oct 15, 2008 10:03 pm (спустя 3 часа 44 минуты; написано за 3 минуты 34 секунды)
   Post subject:
Reply with quote

Уважаемый dimagolov. Если я спрашиваю - то это не просто так. Я не знаю, при помощи какой функции можно послать запрос на наличие файла на удаленном хосте.

Потом бы я смог хоть как-то прикрутить.

Может на пхп было бы проще, но хотелось бы на яве.

Кто-то может подсказать, КАКАЯ функция позволяет проверить доступность файла? Что-то подобное есть?
Back to top
View user's profile Send private message
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Wed Oct 15, 2008 10:08 pm (спустя 4 минуты; написано за 1 минуту 8 секунд)
   Post subject:
Reply with quote

Итак, всем спасибо!

Решил проблемку!
Code (any language): скопировать код в буфер обмена
<img src="http://myhomosite.ru/green.gif" onError="this.src='/red.gif'" />
Ну, это просто хтмл...

Может, кто-то подскажет, всё-таки, как сделать этот запрос явой?
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 10:32 am (спустя 12 часов 24 минуты; написано за 36 секунд)
   Post subject:
Reply with quote

Leon-Killer22,
я же вам ответил.
Юзайте XMLHttpRequest. ;)

Вот даже статейку подброшу.
xmlhttprequest.ru/
ru.wikipedia.org/wiki/XMLHttpRequest
Back to top
View user's profile Send private message Send e-mail
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Thu Oct 16, 2008 11:26 am (спустя 53 минуты; написано за 28 секунд)
   Post subject:
Reply with quote

Все, буду юзать!

Спасибо! Надеюсь, сегодня код напишу, выложу...:)
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 12:59 pm (спустя 1 час 33 минуты; написано за 30 секунд)
   Post subject:
Reply with quote

Leon-Killer22,
обязательно.
Будут вопросы и проблемы при разработки пишите.
(Только предварительно хорошо подумав.)
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 3:31 pm (спустя 2 часа 32 минуты; написано за 2 минуты 17 секунд)
   Post subject:
Reply with quote

Leon-Killer22 wrote:
onError
, так Ваше решение как раз на JavaScript, а не на чистом HTML, так как onerror это событие JS и "this.src='/red.gif'" это JS код, из которого будет сконструированна ф-я обработчик этого события.

п.с. учитывая принцип KISS (ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_KISS) я бы этим решением бы и пользовался. без всяких Request-ов.
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 3:40 pm (спустя 8 минут; написано за 1 минуту 6 секунд)
   Post subject:
Reply with quote

dimagolov,
я согласен с вами насчет того, чем проще тем лучше.
Но, в данном случае я так пониаю, топик стартеру нужна
инфа не ввиде картинки а ввиде содержания её в переменной,
чтобы генерировать соответствующий документ.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 3:45 pm (спустя 5 минут; написано за 2 минуты 35 секунд)
   Post subject:
Reply with quote

Александр Михалицын, что мешает сделать эту картинку с display : none и по умолчанию переменную "доступен", а по onerror менять ее на "не доступен". Очевидно, что легко можно подобрать интервал после которого можно утверждать, что "сайт, который тратит на загрузку картинки более ХХ секунд недоступен". с ajax будет та же история по сути....
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 4:51 pm (спустя 1 час 5 минут; написано за 9 минут 3 секунды)
   Post subject:
Reply with quote

dimagolov,
наверно ничего.

Leon-Killer22,
не мудрствуя лукаво напишу реализацию...
Code (html): скопировать код в буфер обмена
<img (december.com/html/4/element/img.html) src="http://myhomosite.ru/green.gif" id="statusImg" /> (december.com/html/4/element/.html)
Code (JavaScript): скопировать код в буфер обмена
var serverStatus = true; //Переменная будет содержать булево значение если сервер online - true; если offline - false;
var set_event = function(event_type, event_interpriter, object)
{//Автор функции тоже я :)
   if (typeof (object.addEventListener) != 'undefined')
   {
      object.addEventListener(event_type, event_interpriter, false);
   } else {
      object.attachEvent('on' + event_type, event_interpriter);
   }
}
set_event('error', checkStatus, document.getElementById("statusImg")); //Прикручиваем событие
function checkStatus(event_obj)
{
   var img_element = event_obj.target; //Присваиваем переменной img_element значение цели события (говоря простым языком: того объекта с которым произоло событие.)
   img_element.src = '/red.gif'; //Сменим картинку;
   serverStatus = false; //Сервер offline;
}
/* Тут уже можно написать JS код для проверки значения переменной serverStatus. */
if (serverStatus)
{
   //Тут код для отображения если сервер online;
} else {
   //Тут если offline;
}
P.S. Чуть исправил реализацию.
Сделал через addEventListener.

P.S. Еще раз её поправил чтобы IE работал...

Last edited by Александр Михалицын on Thu Oct 16, 2008 5:47 pm; edited 1 time in total
Back to top
View user's profile Send private message Send e-mail
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 5:07 pm (спустя 16 минут; написано за 9 минут 8 секунд)
   Post subject:
Reply with quote

Кстати, по поводу текстового статуса.
Тут вот вообще будет легко.
Вы создаете на страничке div:
Code (html): скопировать код в буфер обмена
<div (december.com/html/4/element/div.html) id="textStatus"> (december.com/html/4/element/.html)</div>
А вот в предыдушем посте код,
нужно засунуть в теги <script></script>,
уже после дива.
После этого.
Нужно добавить в самом начале кода из предыдущего поста функцию:
Code (JavaScript): скопировать код в буфер обмена
function set_textStatus(status)
{
   var div = document.getElementById("textStatus");
   var text;
   if (status)
   {
      text = 'Сервер доступен.';
   } else {
      text = 'Сервер не доступен.';
   }
   var text_node = document.createTextNode(text);
   div.appendChild(text_node);
}
А фрагмент:
Code (JavaScript): скопировать код в буфер обмена
/*
if (serverStatus)
{
   //
} else {
   //
}
Соответственно заменить на:
Code (JavaScript): скопировать код в буфер обмена
/*
if (serverStatus)
{
   //
   set_textStatus(true);
} else {
   //
   set_textStatus(false);
}
Ну вот и все... что еще изволите =)

А что касаемо там:
"Пройдите по ссылке ...".
Дык тут нужно будет функцию set_textStatus чуточку изменить..
Наверно так:
Code (JavaScript): скопировать код в буфер обмена
function set_textStatus(status)
{
   var div = document.getElementById("textStatus");
   var link = document.createElement("a");
   link.href = 'http://host/';
   var link_text_node = document.createTextNode("");
   link.appendChild(link_text_node);
   var text;
   if (status)
   {
      text = ' .';
   } else {
      text = '  .';
   }
   var text_node = document.createTextNode(text);
   div.appendChild(text_node);
   if (!status)
   {
      var ehe_text_node = document.createTextNode("   : ");
      div.appendChild(ehe_text_node);
      div.appendChild(link);
   }
}
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 5:42 pm (спустя 34 минуты; написано за 2 минуты 17 секунд)
   Post subject:
Reply with quote

Александр Михалицын wrote:
addEventListener
, объясните, зачем event-ы, если достаточно inline-обработчика в теге? более того, с чего Вы решили, что Ваш обработчик успеет прицепиться до того, как броузер получит отлуп на картинку и будет пытыться дернуть обработчик error-а?

KISS, KISS, KISS, как завещал... (с)
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 5:49 pm (спустя 7 минут; написано за 52 секунды)
   Post subject:
Reply with quote

dimagolov,
скрипт нужно расположить после.
Думаю успеет.
А inline обработчики использовать не рекомендуется.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 6:06 pm (спустя 17 минут; написано за 4 минуты 40 секунд)
   Post subject:
Reply with quote

Александр Михалицын wrote:
dimagolov,
скрипт нужно расположить после.
после чего? узел DOM для картинки к тому моменту уже будет существовать? обоснуйте.
Александр Михалицын wrote:
Думаю успеет.
Обоснуйте, почему узел DOM уже будет создан, а загрузка картинки еще не завершится.
Александр Михалицын wrote:
А inline обработчики использовать не рекомендуется.
почему не рекомендуется?

п.с. по всему видно, что Вы мало работали с асинхронностью в JS, особенно когда дело касается загрузки чего-то с сервера. даже посылка запросов в определенном порядке не гарантирует получение ответов в том же порядке, ну и т.д.
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Thu Oct 16, 2008 6:23 pm (спустя 17 минут; написано за 7 минут 41 секунду)
   Post subject:
Reply with quote

Quote:
узел DOM для картинки к тому моменту уже будет существовать?
да.
Ну можно конечно и проверять readyState, и.т.д.
Но к чему эти навороты в таком простом скрипте?
Quote:
почему не рекомендуется?
Ну мягко говоря, там каие-то проблемы с валидатором.
Я где-то читал об этом.
Всеже addEventListener рулит!
Quote:
Обоснуйте, почему узел DOM уже будет создан, а загрузка картинки еще не завершится.
Хорошо.
Тогда можно пойти другим путем.
Установить обработчик onError на вышестоящий в иерархической структуре объект через addEventListener. И все, проблема решена. =)
Ввиде кода:
Code (html): скопировать код в буфер обмена
<html> (december.com/html/4/element/html.html)
<head> (december.com/html/4/element/head.html)
<title> (december.com/html/4/element/title.html)</title>
</head>
<body (december.com/html/4/element/body.html) id="body"> (december.com/html/4/element/.html)
<div (december.com/html/4/element/div.html) id="textStatus"> (december.com/html/4/element/.html)</div>
<script> (december.com/html/4/element/script.html)</script>
<img (december.com/html/4/element/img.html) src="http://myhomosite.ru/green.gif" id="statusImg" /> (december.com/html/4/element/.html)
</body>
</html>
Quote:
п.с. по всему видно, что Вы мало работали с асинхронностью в JS
Хех, действительно, не работал. (Но у меня еще все впереди! =) Мне еще только 14, наработаюсь. =))

+1 к карме за хорошие замечания.

Вроде так...

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

Завтра на свежую голову разберусь.
Back to top
View user's profile Send private message Send e-mail
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 6:57 pm (спустя 34 минуты; написано за 7 минут 2 секунды)
   Post subject:
Reply with quote

хм, еще один юнный гений :) я по-доброму, не подумайте..

Заметьте, что в Вашем примере страничка всегда будет выводить 'Сервер доступен.' :)

п.с. идея правильная, а вот картинки в динамике что когда будет происходить у Вас еще не сложилось. обратите внимание на мое замечание про задержку.
п.п.с. но вы меня не переубедите в том, что отказ от inline обработчиков оправдан в этом случае. Разве что ссылкой на стандарт, прямо запрещающий это :)
Я даже предположу откуда такие мысли. Это от идей разделения кода (JS) и представления (HTML). Идея хороша, если не доводить ее до абсурда. Данный случай по-моему явный представитель такой абсурдности, так как во-первых эта злосчастная картинка как раз часть кода (служебный элемент, для пользователя не предназначенный), а во-вторых манипуляции со структурой DOM средствами JS противоречат этой идеи в самой основе :)
Back to top
View user's profile Send private message
dimagolov
Участник форума



Joined: 04 Feb 2007
Posts: 1664
Карма: 96
   поощрить/наказать

Location: Christ Church, Barbados

PostPosted: Thu Oct 16, 2008 6:59 pm (спустя 2 минуты; написано за 1 минуту 26 секунд)
   Post subject:
Reply with quote

упс... вы код поменяли... но пока рабочим он не стал...

п.с. а у нас 10 часов разницы во времени. Можно сказать, что на противоположных сторонах шарика находимся, прикольно :)
Back to top
View user's profile Send private message
Александр Михалицын
Модератор



Joined: 23 May 2008
Posts: 1299
Карма: 83
   поощрить/наказать


PostPosted: Fri Oct 17, 2008 10:33 am (спустя 15 часов 33 минуты; написано за 45 секунд)
   Post subject:
Reply with quote

dimagolov,
так...
Теперь он роботоспособен)))
Просто нужно чтобы была покрайне мере одна картинка!
Ведь иначе будет вызыватся постоянно обработчик события onError! ;)
Back to top
View user's profile Send private message Send e-mail
Leon-Killer22
Участник форума



Joined: 14 Oct 2008
Posts: 57
Карма: -4
   поощрить/наказать

Location: Киев

PostPosted: Tue Oct 21, 2008 12:31 pm (спустя 4 дня 1 час 58 минут; написано за 37 секунд)
   Post subject:
Reply with quote

Всем ОГРОМНОЕ спасибо!!!

Будете в Киеве - милости просим!!!!!:)

Всем + в карму!!!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML