Язык программирования Perl

Системы обмена сообщениями


Системы мгновенного обмена сообщениями (instant messaging), иногда также называемые Интернет-пейджерами, получили огромное распространение: миллионы людей ежедневно общаются с помощью ICQ, Jabber, AOL Instant Messenger или Yahoo!Messenger. В архивах на сайте CPAN можно найти Perl-модули для работы со всеми этими системами. Хотя этот обмен сообщениями ориентирован на взаимодействие людей, его можно использовать для программного извещения пользователя о каком-либо событии. Для примера напишем программу, отправляющую сообщение с использованием открытого протокола мгновенного обмена сообщениями XMPP/Jabber (дополнительный модуль Net::Jabber нужно установить из архива CPAN). В примере после соединения с Jabber-сервером отправляется сообщение пользователю, а после получения от него ответа работа завершается:

use Net::Jabber; # подключаем класс работы с Jabber use utf8; # в Jabber используется UTF-8 my $server = 'jabber.shadrinsk-city.ru'; # сервер my $port = 5222; # порт my $username = 'perl'; # отправитель my $password = 'password'; # его пароль my $resource = 'jud'; # ресурс my $to_user = 'mshock@jabber.ru'; # получатель

my $client = new Net::Jabber::Client(); # создаем клиента $client->SetCallBacks( # указываем обработчики событий: onconnect => \&on_connect, # при подключении onauth => \&on_auth, # при регистрации message => \&on_message, # при получении сообщения ); $client->Execute( # соединяемся с сервером hostname=>$server, port=>$port, username=>$username, password=>$password, resource=>$resource, register=>1, connectsleep=>0, connectattempts=>1, ); # завершение программы произойдет в on_message sub on_connect { # выполнится при подключении к серверу print "Подключен к $server:$port\n"; } sub on_auth { # выполнится при регистрации на сервере print "Зарегистрирован как $username\n"; $client->MessageSend( # ОТПРАВЛЯЕМ СООБЩЕНИЕ to=> $to_user. '/' .$resource, subject=>'сообщение от Perl', body=>'Привет, Jabber!' ); } sub on_message { # выполнится при получении сообщения my $sid = shift; # извлекаем номер и текст my $message = shift; # ответа и выводим его: print "Тема:", $message->GetSubject(), "\n"; print "Сообщение:", $message->GetBody(), "\n"; $client->Disconnect(); # отключаемся от сервера exit(0); # и завершаем работу }

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

Есть примеры использования Perl для разработки шлюзов между IP-сетями и беспроводными сетями. На Perl написан свободно распространяемый пейджинговый шлюз Sendpage (www.sendpage.org). Класс Net::SNPP занимается отправкой сообщений на пейджер по протоколу SNPP (Simple Network Paging Protocol), а модуль Net::SMS служит для работы со службой SMS-сообщений для клиентов GSM-телефонии. Теперь мало кого удивляет, что вскоре после появления очередной новой технологии передачи данных на CPAN выкладываются Perl-модули для работы с ней.



Содержание раздела