Author |
Message |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Wed Oct 15, 2008 12:49 pm (написано за 2 секунды)
Post subject: Проверка статуса доступности компьютера
|
|
Добрый день всем. Ситуация следующая... У меня дома компьютер с внешним IP. На нем установлен Апач и висит сайт. Есть два доменных имени - одно из них привязано к моему IP, а другой - к хостинг-провайдеру, где находится почти такой же сайт. Проблема: компьютер не может постоянно "пыхтеть" (возможно он подвиснет или провайдера заглючит). Идея следующая... Я подумал, что можно будет создать простенький сайт на другом хостинге (можно даже народ.ру) состоящий из двух хтмл-файлов (один будет включать два фрейма: один фрейм со криптом, а второй - с сайтом на моей машине). Теперь опишу сам скрипт. Предположим, у меня есть зеркало (просто копия) моего сайта на локальной машине, который находится где-то в интернете, на каком-то шаровом хостинге. Так вот, скрипт должен как-то выдавать статус "Основной сервер работает" или "Основной сервер не работает". И рядом написано "Если основной сервер не работает, пожалуйста, пройдите по ссылке "..........". Как же сделать этот скрипт? Была у меня идея вот так (все действия изложены последовательно): Скрипт пытается соедениться с моим компом (например, запрашивает графический файл - зеленый кружок - он означала бы, что сайт работает). Если все нормально - отображается рисунок. Если файл не найден - вставляет из своей папки красный кружочек - и сообщения, что основной сервер не доступен. Может, написано бредово. Но я это вижу приблизительно так. Было бы неплохо сделать это именно на JS, но и с PHp было бы нелохо повозиться.
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Wed Oct 15, 2008 3:17 pm (спустя 2 часа 27 минут; написано за 1 минуту 4 секунды)
Post subject:
|
|
Quote: |
Но я это вижу приблизительно так | реализововать свое видинее пробовали? возникли сложности? какие?
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Wed Oct 15, 2008 3:53 pm (спустя 36 минут; написано за 50 секунд)
Post subject:
|
|
Leon-Killer22, я вам подскажу. Тут нужно XMLHttpRequest юзать! Там нужно будет обратиться к страничке, если status 200, значит комп онлайн.
|
|
Back to top |
|
 |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Wed Oct 15, 2008 4:11 pm (спустя 17 минут; написано за 6 минут 29 секунд)
Post subject:
|
|
dimagolov - честно говоря не пробовал вообще - это лишь теория. Дело в том. что я даже не знаю, как нужные мне функции обозначить. Постараюсь сделать так, как вижу я (пишу неграмотно,):
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Wed Oct 15, 2008 6:18 pm (спустя 2 часа 7 минут; написано за 2 минуты 8 секунд)
Post subject:
|
|
Leon-Killer22, если мне что-то нужно сделать, то я в начале думаю как это можно реализовать, а как придумал, то беру и реализовываю и пробую на практике. если возникают проблемы, то выясняю в чем причины. если причины в несостоятельности моей идеи, то я ищу другие идеи, возможно, на форуме. что я делаю неправильно?
|
|
Back to top |
|
 |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Wed Oct 15, 2008 10:03 pm (спустя 3 часа 44 минуты; написано за 3 минуты 34 секунды)
Post subject:
|
|
Уважаемый dimagolov. Если я спрашиваю - то это не просто так. Я не знаю, при помощи какой функции можно послать запрос на наличие файла на удаленном хосте. Потом бы я смог хоть как-то прикрутить. Может на пхп было бы проще, но хотелось бы на яве. Кто-то может подсказать, КАКАЯ функция позволяет проверить доступность файла? Что-то подобное есть?
|
|
Back to top |
|
 |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Wed Oct 15, 2008 10:08 pm (спустя 4 минуты; написано за 1 минуту 8 секунд)
Post subject:
|
|
Итак, всем спасибо! Решил проблемку!Ну, это просто хтмл... Может, кто-то подскажет, всё-таки, как сделать этот запрос явой?
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 10:32 am (спустя 12 часов 24 минуты; написано за 36 секунд)
Post subject:
|
|
Leon-Killer22, я же вам ответил. Юзайте XMLHttpRequest. ;) Вот даже статейку подброшу. xmlhttprequest.ru/
ru.wikipedia.org/wiki/XMLHttpRequest
|
|
Back to top |
|
 |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Thu Oct 16, 2008 11:26 am (спустя 53 минуты; написано за 28 секунд)
Post subject:
|
|
Все, буду юзать! Спасибо! Надеюсь, сегодня код напишу, выложу...:)
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 12:59 pm (спустя 1 час 33 минуты; написано за 30 секунд)
Post subject:
|
|
Leon-Killer22, обязательно. Будут вопросы и проблемы при разработки пишите. (Только предварительно хорошо подумав.)
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 3:31 pm (спустя 2 часа 32 минуты; написано за 2 минуты 17 секунд)
Post subject:
|
|
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 |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 3:40 pm (спустя 8 минут; написано за 1 минуту 6 секунд)
Post subject:
|
|
dimagolov, я согласен с вами насчет того, чем проще тем лучше. Но, в данном случае я так пониаю, топик стартеру нужна инфа не ввиде картинки а ввиде содержания её в переменной, чтобы генерировать соответствующий документ.
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 3:45 pm (спустя 5 минут; написано за 2 минуты 35 секунд)
Post subject:
|
|
Александр Михалицын, что мешает сделать эту картинку с display : none и по умолчанию переменную "доступен", а по onerror менять ее на "не доступен". Очевидно, что легко можно подобрать интервал после которого можно утверждать, что "сайт, который тратит на загрузку картинки более ХХ секунд недоступен". с ajax будет та же история по сути....
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 4:51 pm (спустя 1 час 5 минут; написано за 9 минут 3 секунды)
Post subject:
|
|
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 |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 5:07 pm (спустя 16 минут; написано за 9 минут 8 секунд)
Post subject:
|
|
Кстати, по поводу текстового статуса. Тут вот вообще будет легко. Вы создаете на страничке 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); } | А фрагмент:Соответственно заменить на:Ну вот и все... что еще изволите =) А что касаемо там: "Пройдите по ссылке ...". Дык тут нужно будет функцию 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 |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 5:42 pm (спустя 34 минуты; написано за 2 минуты 17 секунд)
Post subject:
|
|
Александр Михалицын wrote: |
addEventListener | , объясните, зачем event-ы, если достаточно inline-обработчика в теге? более того, с чего Вы решили, что Ваш обработчик успеет прицепиться до того, как броузер получит отлуп на картинку и будет пытыться дернуть обработчик error-а? KISS, KISS, KISS, как завещал... (с)
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 5:49 pm (спустя 7 минут; написано за 52 секунды)
Post subject:
|
|
dimagolov, скрипт нужно расположить после. Думаю успеет. А inline обработчики использовать не рекомендуется.
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 6:06 pm (спустя 17 минут; написано за 4 минуты 40 секунд)
Post subject:
|
|
Александр Михалицын wrote: |
dimagolov, скрипт нужно расположить после. | после чего? узел DOM для картинки к тому моменту уже будет существовать? обоснуйте. Александр Михалицын wrote: |
Думаю успеет. | Обоснуйте, почему узел DOM уже будет создан, а загрузка картинки еще не завершится. Александр Михалицын wrote: |
А inline обработчики использовать не рекомендуется. | почему не рекомендуется? п.с. по всему видно, что Вы мало работали с асинхронностью в JS, особенно когда дело касается загрузки чего-то с сервера. даже посылка запросов в определенном порядке не гарантирует получение ответов в том же порядке, ну и т.д.
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Thu Oct 16, 2008 6:23 pm (спустя 17 минут; написано за 7 минут 41 секунду)
Post subject:
|
|
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 |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 6:57 pm (спустя 34 минуты; написано за 7 минут 2 секунды)
Post subject:
|
|
хм, еще один юнный гений :) я по-доброму, не подумайте.. Заметьте, что в Вашем примере страничка всегда будет выводить 'Сервер доступен.' :) п.с. идея правильная, а вот картинки в динамике что когда будет происходить у Вас еще не сложилось. обратите внимание на мое замечание про задержку. п.п.с. но вы меня не переубедите в том, что отказ от inline обработчиков оправдан в этом случае. Разве что ссылкой на стандарт, прямо запрещающий это :) Я даже предположу откуда такие мысли. Это от идей разделения кода (JS) и представления (HTML). Идея хороша, если не доводить ее до абсурда. Данный случай по-моему явный представитель такой абсурдности, так как во-первых эта злосчастная картинка как раз часть кода (служебный элемент, для пользователя не предназначенный), а во-вторых манипуляции со структурой DOM средствами JS противоречат этой идеи в самой основе :)
|
|
Back to top |
|
 |
dimagolov
Участник форума
Joined: 04 Feb 2007
Posts: 1664
Карма: 96 поощрить/наказать
Location: Christ Church, Barbados
|
Posted: Thu Oct 16, 2008 6:59 pm (спустя 2 минуты; написано за 1 минуту 26 секунд)
Post subject:
|
|
упс... вы код поменяли... но пока рабочим он не стал... п.с. а у нас 10 часов разницы во времени. Можно сказать, что на противоположных сторонах шарика находимся, прикольно :)
|
|
Back to top |
|
 |
Александр Михалицын
Модератор
Joined: 23 May 2008
Posts: 1299
Карма: 83 поощрить/наказать
|
Posted: Fri Oct 17, 2008 10:33 am (спустя 15 часов 33 минуты; написано за 45 секунд)
Post subject:
|
|
dimagolov, так... Теперь он роботоспособен))) Просто нужно чтобы была покрайне мере одна картинка! Ведь иначе будет вызыватся постоянно обработчик события onError! ;)
|
|
Back to top |
|
 |
Leon-Killer22
Участник форума

Joined: 14 Oct 2008
Posts: 57
Карма: -4 поощрить/наказать
Location: Киев
|
Posted: Tue Oct 21, 2008 12:31 pm (спустя 4 дня 1 час 58 минут; написано за 37 секунд)
Post subject:
|
|
Всем ОГРОМНОЕ спасибо!!! Будете в Киеве - милости просим!!!!!:) Всем + в карму!!!
|
|
Back to top |
|
 |
|