Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№106-05-2008 01:32:02

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Как определить что сервер недоступен?

Здравствуйте уважаемые,

в своём расширении использую nsIObserverService для отслеживания "http-on-examine-response" и получения HTTP-кодов от сервера. Всё прекрасно работает. Но - если сервер лежит, то, естественно, даже код 404 мы не получим - сервера-то нет.

Вопрос - как и в каком месте определять, что пользовательский запрос не выполнен из-за отсутствия ответа сервера?

Заранее спасибо!

Отсутствует

 

№206-05-2008 07:07:19

TLemur
Забанен
 
Группа: Members
Зарегистрирован: 18-10-2004
Сообщений: 1764
UA: Firefox 2.0

Re: Как определить что сервер недоступен?

AllSeeingI

Если через какой-то промежуток времени (time out) мы не получаем от сервера ответа вообще - считаем,  что он сдох.

Отсутствует

 

№311-05-2008 09:54:04

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Re: Как определить что сервер недоступен?

Задача была решена через использование Progress Listener'ов:

Выделить код

Код:

onStateChange: function(aWebProgress, aRequest, aFlag, aStatus)
{
	if(aFlag & Components.interfaces.nsIWebProgressListener.STATE_STOP)
	{
		if(aStatus == 2152398878) // NS_ERROR_UNKNOWN_HOST
		{

Если мы внутри последнего условия - сервер не ответил.

Отсутствует

 

№411-05-2008 14:03:57

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Как определить что сервер недоступен?

AllSeeingI
А как был привязан nsIWebProgressListener к nsIChannel ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№512-05-2008 08:19:16

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Re: Как определить что сервер недоступен?

Anton
Err... да никак - нам этого вроде вообще делать не надо. Просто привязываем listener к браузеру через addProgressListener - и всё.

Отсутствует

 

№612-05-2008 14:13:12

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Как определить что сервер недоступен?

В первом сообщении упомянут http-on-examine-response. Аргументом у него nsIChannel. То есть мне интересно, как из nsIChannel можно получить браузер, который его создал, чтобы потом "повесить" на него nsIWebProgressListener. Или, итоговое решение уже без http-on-examine-response ?


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№712-05-2008 20:17:28

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Re: Как определить что сервер недоступен?

Anton

Ааа, понял. Всё очень просто:

Выделить код

Код:

observe: function(aSubject, aTopic, aData)
{
	if((aTopic == 'http-on-examine-response'))
	{
		try
		{
			var httpChannel = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel);

			var interfaceReq = null;

			if(!httpChannel.notificationCallbacks)
			{
				if(httpChannel.loadGroup && httpChannel.loadGroup.notificationCallbacks)
				{
					interfaceReq = httpChannel.loadGroup.notificationCallbacks.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
				}
			}
			else
			{
				interfaceReq = httpChannel.notificationCallbacks.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
			}

			if(interfaceReq)
			{
				var doc = interfaceReq.getInterface(Components.interfaces.nsIDOMWindow).document;
				var index = gBrowser.getBrowserIndexForDocument(doc)

				if(index != -1)
				{
					// Браузер, стартовавший запрос:
					var browser = gBrowser.getBrowserForDocument(doc)

Отредактировано AllSeeingI (12-05-2008 20:18:21)

Отсутствует

 

№813-05-2008 10:07:39

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Как определить что сервер недоступен?

Ясно, спасибо.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№913-05-2008 13:37:25

AllSeeingI
Участник
 
Группа: Members
Зарегистрирован: 12-03-2007
Сообщений: 107
UA: Firefox 2.0

Re: Как определить что сервер недоступен?

Anton

Маленькое замечание: observer и listener мы используем независимо, т.е. observer привязывается к gBrowser (и оттуда вытягиваем tab/browser, из которого вышел запрос), а listener привязываем к gBrowser.selectedBrowser (или любому другому конкретному браузеру). Мы не привязываем listener изнутри observer'а - если сервер недоступен, то вы туда просто не попадёте.

Отсутствует

 

№1013-05-2008 14:04:45

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
UA: Firefox 2.0
Веб-сайт

Re: Как определить что сервер недоступен?

Мы не привязываем listener изнутри observer'а - если сервер недоступен, то вы туда просто не попадёте.

Ну, может быть получится "привязаться" к браузеру по http-on-modify-request.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]