Личный кабинет    
Назад К началу Вперед Карта сайта Телефонные коды стран и городов Мира Анализатор тарифов Служб IP-Телефонии и Рейтинг

Разделы
Введение
Литература
Операторы
Оборудование
Анализатор
Сотрудничество
Печать карт
Новости
Опросник
Коды
Справка
Работа
Каталог
Хостинг
Личный кабинет

Реклама

Perl для IP-Телефонии (43 – Серверы UDP , часть 15)

предыдущая часть ««»» следующая часть

Для проверки данного сценария был изменен сценарий инвертирующе­го эхо-сервера; он стал ненадежным. Изменение внесено в строку 20.

for (1..3) {$sock->send($msg_out) or die "send(): $!n" if rand() > 0.7;}

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

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

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

В том виде, в каком он представлен, клиентский сценарий не очень эффективен, поскольку метод can_read () вызывается с тайм-аутом, даже если в хеш % PENDING отсутствуют запросы, ответы на которые нужно было бы ждать. Этот Я достаток можно устранить, изменив строку 23 листинга следующим образом, my @ready= $select->can_read( %PENDING ? TIMEOUT :() );

Если хеш %PENDING не пуст, вызывается метод can_read () с тайм-аутом. В другом случае этому методу вместо параметров передается пустой список, в результате метод can_read () блокируется на неопределенное время, пока сокет или дескриптор STDIN не будут готовы для чтения.



2015-04-13 12:39:37

предыдущая часть ««»» следующая часть


ДОКУМЕНТАЦИЯ VoIP


НОВОСТИ СВЯЗИ


РЕКОМЕНДУЕМ

 
[ стандарты | обзор | оборудование | анализатор | коды | новости | карта | партнерам | Мы ВКонтаке ]
Запрещается копировать материалы сайта без уведомления авторов.
С вопросами и предложениями обращайтесь со страницы контактов
Copyright c 1999-2024 IPTop.Net
 
IP-Телефония, Интернет Телефония, Компьютерная телефония