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

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

Реклама

Perl для IP-Телефонии (36 – Неблокирующий ввод-вывод, часть 17)

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

Прежде чем перейти к подробному изучению этих модулей, рассмотрим простое приложение, в котором они используются.

Неблокирующий эхо-сервер

В листинге приведен код простого эхо-сервера, в котором применяется модуль IO::SessionSet. Этот сервер просто возвращает все отправленные ему строки, например, при обращении к странице представляющей http://pcservicehome.ru/ или другую информацию.

Листинг 13.3. Эхо-сервер, В котором применяется модуль IO: :SessionSet

#!/usr/local/bin/perl -w
# Файл: echo.pl
use    strict;
use    IO::SessionSet;
use    constant PORT    => 12000;
my $listen_socket = 10::Socket::INET->new(LocalPort => PORT,
Listen     => 20,
Proto    => tcp,
Reuse    => 1);
die "Can’t create a listening socket: $@" unless $listen_socket;
my $session_set = IO::SessionSet->new($listen__socket) ;
warn "Listening for connections...n";
while (1) {
my $ready = $session_set->wait;
for my $session (@ready) { my $data;
if (my $rc = $session->read($data,4096)) {
$session->write($data) if $rc > 0;
} else {
$session->clоse;
}
}

Проведем анализ программы.

Строки 1-4. Загрузка модулей. Выполнение программы начинается с загрузки модуля IO::SessionSet, который загружает модуль IO:: SessionData автоматически.

Строки 5-9. Создание приемного сокета. Создается приемный сокет обычным образом, в случае ошибки вызывается функция die с сообщением об ошибке.

Строка 10. Создание нового объекта IO::SessionSet. Создается объект IO::SessionSet путем вызова метода IO::SessionSet->new() с использованием приемного сокета в качестве параметра. Этот метод сообщает объекту IO::SessionSet, что в сокете должен автоматически выполняться прием нового соединения с помощью функции accept () при каждой попытке подключения нового клиента.

Строки 11-13. Главный цикл. Остальная часть программы сервера состоит примерно из десятка строк кода. Основу сервера составляет бесконечный цикл. При каждом проходе по циклу вызывается метод wait () объекта IO:: SessionSet, который возвращает список дескрипторов, готовых для чтения. Данный метод аналогичен методу can_read () модуля IO::Select, но возвращает список развитых объектов IO::SessionData, а не более простых объектов ПО: :Socket.



2014-08-16 12:13:38

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


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


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


РЕКОМЕНДУЕМ

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