Тайм аут подключения к приложению

Тайм аут подключения к приложению

Область применения: управляемое приложение, обычное приложение.

1. При работе с внешними ресурсами с помощью объектов WSОпределения , WSПрокси , HTTPСоединение , FTPСоединение , ИнтернетПочтовыйПрофиль следует задавать таймаут – предельное время ожидания выполнения операции. В противном случае, в результате бесконечного ожидания программа зависнет или часть функционала программы станет недоступна.

Установка таймаута является защитой от целого ряда внешних факторов:

  • нестабильного подключения к Интернету, когда регулярно происходит прерывание связи, и система не может получить цельный ответ сервера, к которому выполняется подключение;
  • при включенных антивирусных программах или при неправильных настройках брандмауэра;
  • неправильной настройки прокси-сервера;
  • ненадежной работы веб-сервера из-за возросшей нагрузки или некорректной работы скриптов.

Например, при получении описания веб-сервиса и вызове его операций – если удаленная сторона долго не отвечает (например, выключена, находится на обслуживании или возникли временные неполадки), ожидание ответа может длиться бесконечно. Поэтому если веб-сервис был вызван в результате интерактивных действий пользователя, то внешне будет выглядеть так, что «программа зависла»; а если веб-сервис вызывается из регламентного задания, то связанная с ним часть функционала программы может стать недоступна.

2. В общем виде, время выполнения операции с внешними ресурсами складывается из шести этапов:

  • DNS Lookup — время, потраченное на определение IP адреса по доменному имени (если применимо);
  • Connect — установка соединения с веб-сервером по полученному IP-адресу;
  • Send — отправка данных на веб-сервер;
  • Wait — ждем, пока данные дойдут до веб-сервера и он их обработает;
  • Receive — получение ответа от веб-сервера;
  • Cache Read – получение данных от веб-сервера.

Например, при таймауте в 60 секунд программа и вызываемый внешний ресурс должны успеть выполнить шесть выше перечисленных этапов операции, иначе соединение будет разорвано, а передача данных прервана. Однако если в процессе выполнения операции возникнет сбой, то система и/или пользователь будет зря ожидать 60 секунд.

Поэтому величину таймаута рекомендуется определять, исходя из ожидаемого времени выполнения конкретной операции:

  • Для быстрых операций (например, проверка доступности сервера) величина таймаута должна выбираться, соответственно, небольшой;
  • В общем случае, не следует выбирать таймаут более 3 минут, чтобы при недоступности удаленной стороны не допустить эффект «зависания» программы;
  • Но если операция выполняется долго из-за этапов Send или Cache Read, т.е. это передача больших объемов данных на веб-сервер или загрузка большого файла с внешнего ресурса, то следует устанавливать большой таймаут, исходя из оценки объема передаваемых данных, но не более 12 часов.

Подобнее о рекомендуемых величинах таймаута для различных операций см. в таблице п. 4.

3. Рекомендации по снижению величин таймаута и повышению отзывчивости программы при работе с внешними ресурсами.

3.1. При разработке веб-сервисов, на операции которых предусмотрен таймаут более 20 секунд (ориентировочно), рекомендуется:

  • предусмотреть в веб-сервисе отдельную контрольную операцию Ping;
  • при работе с этим веб-сервисом, предварительно получать для нее прокси с небольшим таймаутом в 7 секунд и вызывать контрольную операцию Ping;
  • только после этого получать основной прокси.

Пример вызова веб-сервиса.

Неправильно

Реализация модуля веб-сервиса PingPong:

Функция Pong(Знач Параметр)
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ‘Привет, %1’"), Параметр);
КонецФункции

Функция Ping()
Возврат Истина; // Проверка связи
КонецФункции

Функция Pong(Знач Параметр)
Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = ‘Привет, %1’"), Параметр);
КонецФункции

Реализация вызывающей стороны (без использования Библиотеки стандартных подсистем):

// Ждем не более минуты
PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 60);
Результат = PingPong.Pong(НСтр("ru = ‘Мяч’"));

// Ждем не более 3 секунд
PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 3);
PingPong.Ping(); // проверка связи

// Сервис жив, далее работаем с ним и ждем не более минуты
PingPong = Новый WSПрокси(АдресВебСервиса, , , , , 60);
Результат = PingPong.Pong(НСтр("ru = ‘Мяч’"));

Читайте также:  Xiaomi redmi note 3 как разблокировать загрузчик

При использовании Библиотеки стандартных подсистем:

  • для работы с веб-сервисами предназначена функция WSПрокси общего модуля ОбщегоНазначения (включает в себя поддержку контрольной операции Ping );
  • для получения данных по протоколам HTTP(S) и FTP(S) – подсистема «Получение файлов через Интернет».

Пример реализации вызывающей стороны с использованием Библиотеки стандартных подсистем:

// Сделать контрольный вызов Ping и ждать не более минуты на дальнейших операциях.
PingPong = ОбщегоНазначения.WSПрокси(АдресВебСервиса. 60, Истина);
// Сервис точно жив, далее работаем с ним.
Результат = PingPong.Pong(НСтр("ru = ‘Мяч’"));

3.2. Для других видов внешних ресурсов (не веб-сервисов) рекомендуется применять аналоги операции Ping . Например:

  • для сервисов, работающих через REST API – это контрольная отправка тестовой команды; в большинстве случаев, если ответ с кодом 200, то сервис работает;
  • для FTP/WebDAV-ресурсов – это контрольная загрузка (отправка) файла-пустышки.

3.3. Веб-сервисы, операции, которых занимают объективно много времени из-за этапа Wait (т.е. долго отрабатывает само веб-приложение), и они не могут быть ускорены (оптимизированы) по объективным причинам, следует переводить на асинхронный режим выполнения:

  • запускать фоновое задание для выполнения подобной «тяжелой» операции,
  • и предусмотреть дополнительные операции по проверке готовности и получению результата.

Пример асинхронного вызова веб-сервиса.

Неправильно

Реализация модуля веб-сервиса Long:

Функция GetData()
Результат = ;
Возврат Результат;
КонецФункции

Функция StartDoLong()
// запуск фонового задания
ИдентификаторОперации = .
// возвращаем идентификатор операции для отслеживания ее готовности
Возврат ИдентификаторОперации;
КонецФункции

Функция IsReady(Знач ИдентификаторОперации)
// проверяем, завершено ли фоновое задание по переданному идентификатору
Готовность = .
Возврат Готовность;
КонецФункции

Функция GetData(Знач ИдентификаторОперации)
Результат = ;
Возврат Результат;
КонецФункции

Реализация вызывающей стороны:

Long = Новый WSПрокси(АдресВебСервиса, , , , , 600); // ждем 1 час

Long = Новый WSПрокси(АдресВебСервиса, , , , , 600); // ждем 1 час

Пока Не Long.IsReady(ИдентификаторОперации) Цикл

КонецЦикла;
Результат = Long.GetData(ИдентификаторОперации);

* это лишь упрощенная схема реализации вызывающей стороны; в действительности,
код вызывающей стороны также должен быть реализован асинхронно с помощью включения
регламентного задания, либо периодического обработчика ожидания на клиенте,
который проверяет готовность и получает результат.

4. Рекомендуемые величины таймаутов для различных операций:

Операция Таймаут (секунд)
Получение описания веб-сервиса 7
Проверка корректности введенного адреса, взаимодействие с менеджером сервиса в модели сервиса и прочие «быстрые» операции 10-20
Получение сведений об одном контрагенте, обмен сообщениями, отправка SMS, удаленное администрирование ИБ в модели сервиса 60-120 1
Передача сообщений обмена данными через веб-сервис или получение файлов из внешнего ресурса до 1 Мб. 120-180 1
Загрузка файлов более 1 Мб Если известен размер файла, то размер в мегабайтах * 128 2 , иначе предельное время загрузки, но не более 43200 3

1 Следует вызывать только после контрольной операции Ping .

2 Загрузка 1 мегабайта данных занимает 128 секунд, при скорости 64 кбит/с, т.к. сотовые операторы в определенных случаях ограничивают скорость загрузки этой величиной.

3 Таймаут продолжительностью 43200(12 часов) сек. является компромиссным решением, т.к. в случае нештатной ситуации процесс «отвиснет» на следующее утро и вернет управление, в отличие от полностью зависнувшей программы при неустановленном таймауте.

когда клиент пытается подключиться к отключенному IP-адресу, существует длительный тайм-аут более 15 секунд. Как мы можем уменьшить этот таймаут? Каков способ его настройки?

код, который я использую для настройки подключения сокета, выглядит следующим образом:

10 ответов:

Я нашел это. Проще, чем принятый ответ, и работает с .NET v2

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

Читайте также:  Содержание драгметаллов в жестком диске компьютера

Я не программирую на C#, но в C мы решаем ту же проблему, делая сокет неблокирующим, а затем помещая fd в цикл select/poll со значением тайм-аута, равным количеству времени, которое мы готовы ждать успешного подключения.

нашел этой для Visual C++ и объяснение там также склоняется к механизму выбора / опроса, который я объяснил ранее.

по моему опыту, вы не можете изменить значения времени ожидания подключения в розетку. Изменения это для всех (путем настройки параметров ОС).

Я решил проблему с помощью сокетов.Метод ConnectAsync вместо сокета.метод Connect. После вызова сокета.ConnectAsync (SocketAsyncEventArgs), запустите таймер (timer_connection), если время истекло, проверьте, подключено ли соединение сокета(if (m_clientSocket.Подключен)), если нет, всплывает ошибка тайм-аута.

проверьте это на MSDN. Не похоже, что вы можете сделать это с помощью реализованных свойств в классе сокета.

Плакат на MSDN на самом деле решил свою проблему С помощью резьбы. У него был основной поток, который вызывал другие потоки, которые запускали код соединения в течение нескольких секунд, а затем проверяли свойство Connected сокета:

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

Что вы пытаетесь сделать, и почему он не может ждать 15-30 секунд, прежде чем тайм-аут?

У меня была такая же проблема при подключении к сокету ,и я придумал следующее решение, оно отлично работает для меня. —

Я работал с Unity и имел некоторые проблемы с BeginConnect и другими асинхронными методами из сокета.

есть что-то, чем я не понимаю, но примеры кода, пока не работает для меня.

поэтому я написал этот кусок кода, чтобы заставить его работать. Я тестирую его в сети adhoc с android и ПК, а также в локальном на моем компьютере. Надеюсь, это поможет.

и там очень простой сторожевой пес на C#, чтобы заставить его работать:

Это похоже на ответ FlappySock, но я добавил к нему обратный вызов, потому что мне не понравился макет и как возвращалось логическое значение. В комментариях к этому ответу от Ника Миллера:

Достаточно часто многие пользователи ПК, которые так или иначе связаны с Интернетом, а также геймеры, подключающиеся к игровым порталам, наблюдают появление ошибок соединения с сервером. Сейчас мы рассмотрим вопрос о том, что значит тайм-аут операции. Более того, будет предложено несколько основных способов решения этой проблемы.

Тайм-аут операции — что это такое?

Итак, на экране монитора возникает ошибка, сообщающая пользователю о том, что соединение прервано, вернее, время ожидания подключения истекло.

В принципе, тайм-аут и можно трактовать как некий временной промежуток, в течение которого система ожидает ответа сервера на собственный отправленный запрос. В системах Windows это параметр установлен по умолчанию, а его значение прописано в сетке системного реестра настроек текущего компьютерного терминала в подразделе SYSTEM, где во вложенных директориях находится подпапка Parameters, где время указано в секундах. Как правило, изменять его не рекомендуется.

Причины возникновения ошибки

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

Читайте также:  Как найти свою учетную запись microsoft

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

Кроме всего прочего, тайм-аут операции завершает время ожидания подключения при использовании или неправильной настройке прокси-сервера. В данном случае речь идет и о настройках прокси в системе, и об использовании анонимных прокси-серверов, когда пользователь по каким-либо причинам хочет остаться во Всемирной паутине неузнанным, а проще говоря, скрыть истинный IP-адрес своего компьютерного терминала. Рассмотрим несколько основных методов исправления ситуации без вмешательства в системный реестр для выставления более высокого значения периода ожидания.

Тайм-аут операции: что делать? Простейший способ исправления ситуации

Как считается, наиболее простым способом, позволяющим избавиться от ошибки 118, является обычное закрытие не отвечающей страницы и ее повторное открытие по истечении минут десяти. Иногда может потребоваться закрыть и перезапустить сам интернет-браузер (часто такие ситуации почему-то наблюдаются в Google Chrome и других браузерах на его основе).

Если такой вариант не помогает, а сообщение «Ошибка: Тайм-аут операции…» выдается снова, можно применить обычную перезагрузку компьютера или ноутбука (а лучше и всех маршрутизаторов типа роутеров или ADSL-модемов).

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

Изменение параметров прокси-сервера

Несколько сложнее обстоит дело с настройками прокси в системе. Рассмотрим в качестве примера стандартный Internet Explorer. В браузере нужно использовать раздел «Свойства обозревателя» и вкладку «Подключения».

Снизу имеется кнопка «Настройка сети», после нажатия на которую будет произведен вход в окно настройки параметров локальной сети. Здесь достаточно просто снять галочку (флажок) со строки «Использовать прокси-сервер» и сохранить изменения (иногда можно отключить прокси для локальных адресов).

Но вот если подключение производится при помощи прокси, для установки правильных настроек лучше обратиться к провайдеру.

Исправление системного файла Hosts

Теперь перейдем к более сложному методу исправления ошибок, когда может срабатывать тайм-аут операции.

Сначала в меню отображения файлов и папок (в стандартном «Проводнике» это меню «Сервис» со строкой «Параметры папок») на вкладке вида необходимо задать показ скрытых папок и файлов.

После вышеуказанной операции необходимо открыть меню «Выполнить» и ввести в строке команду «notepad %windir%system32driversetchosts» (естественно, без кавычек), поле чего в «Блокноте» будет открыт файл Hosts. Обратите внимание: снизу имеется строка «::1 localhost». По идее, она должна быть последней, так что все, что находится ниже нее, нужно удалить, после чего произвести сохранение файла с оригинальным названием и местоположением. Теперь остается только перезагрузить компьютерный терминал. Затем, как правило, ошибка исчезает.

Заключение

Вот, собственно, и все по поводу срабатывающего тайм-аута. Конечно, можно использовать еще и редактирование системного реестра с заданием большего значения периода ожидания ответа сервера, вот только гарантии, что все остальные ресурсы будут грузиться без проблем, никто дать не может. К тому же, как уже понятно, и сами страницы, если и будут грузиться, то намного дольше. А это ни одному юзеру не нужно.

Ссылка на основную публикацию
Создать страницу вконтакте новую регистрация на русском
Регистрация ВК — процедура несложная, но имеющая множество нюансов, о которых новому пользователю стоит узнать до того, как он приступит...
Сборка и реализация компьютеров база данных
В настоящее время среди разработчиков базы данных (БД) большой популярностью пользуется реляционная СУБД ACCESS, входящая в состав пакета Microsoft Office...
Содержание драгметаллов в жестком диске компьютера
HDD жесткие диски на лом Покупаем компьютерные жесткие диски в сборе на лом. Цена за кг Цены на лом плат...
Средство просмотра html android что это
В последнее время многие пользователи стали получать системные push-уведомления на своих Андроид устройствах – “Отключите опасное приложение”. В отдельных случаях...
Adblock detector