|
Книги, рекомендуемые вместе с этой книгой:
Раздел каталога:
|
ПредисловиеСегодня сети применяются буквально повсеместно. В офисе компьютеры объединены в локальные сети, подключенные к Internet. Дома персональные компьютеры соединяются с Internet пока еще только время от времени, но для подключения все чаще используются стационарные кабели и модемы DSL. Новые беспроводные технологии, такие как Bluetooth, должны еще больше расширить область охвата сетей и включить в нее все, начиная от сотовых телефонов и заканчивая бытовыми приборами. Такие перспективы открывают огромные возможности для новаторства. Создаются новые классы приложений, позволяющих воспользоваться постоянными высокоскоростными соединениями. Интерактивные игры дают возможность игрокам с разных точек Земли состязаться на виртуальных игровых площадках и мгновенно передавать друзьям известия о своих победах с применением протоколов экстренной передачи сообщений. Новые одноранговые системы, такие как Napster и Gnutella, позволяют непосредственно обмениваться звуковыми файлами в формате MP3 и другим информационным наполнением. В проекте SETI@Home используется свободное время миллионов персональных компьютеров во всем мире для поиска признаков внеземной жизни в огромной массе космического шума. Сети проникают во все области человеческой деятельности, и это способствует также развитию обычных приложений. Обладая нужными знаниями, можно создать робот, который будет собирать и подытоживать данные с Web-узлов конкурентов; написать сценарий, автоматически сообщающий о падении курса определенных акций ниже указанного уровня; разработать программу подготовки ежедневных управленческих отчетов и отправки их по электронной почте; а также спроектировать сервер, который способен при одних условиях сосредоточить выполнение задачи, требующей большого объема вычислений, на одном мощном компьютере, а при других - распределить ее по нескольким узлам компьютерного кластера. Тем не менее без понимания того, как работают сетевые приложения, невозможно полностью воспользоваться всеми преимуществами сети, независимо от того, решается ли задача поиска товаров по самой выгодной цене или поиска братьев по разуму в отдаленной галактике. Для этого, прежде всего, нужно уметь работать с протоколом TCP/IP, который не только лежит в основе всего взаимодействия по Internet, но и чаще всего применяется в локальной сети. Необходимо знать, как подключиться к удаленной программе, получить и передать в нее данные и как устранить возможные нарушения. Для работы с существующими приложениями, такими как Web-серверы, нужно знать, как реализованы прикладные протоколы, в основе которых лежит протокол TCP/IP, и как работать с широко применяемыми форматами обмена данных типа XML и MIME. В настоящей книге рассматривается разработка и реализация практически применимых сетевых приложений с использованием языка программирования Perl. Этот язык идеально подходит для сетевого программирования по многим причинам. Во-первых, как и другие средства этого языка, сетевые модули Perl позволяют быстро решать поставленные задачи. На этом языке достаточно написать две строки кода, чтобы открыть сетевое соединение с сервером, находящимся где-то в Internet, и отправить ему сообщение. Полностью работоспособный Web-сервер может быть реализован с помощью нескольких десятков строк программы. Во-вторых, Perl разрабатывается в рамках проекта с открытым исходным кодом, и это побудило многих талантливых программистов внести свой вклад в постоянно растущую библиотеку модулей независимых разработчиков. Многие из этих модулей предоставляют мощные интерфейсы к обычным сетевым приложениям. Например, после загрузки модуля LWP::Simple достаточно вызвать единственную функцию для выборки с удаленного сервера всего содержимого Web-страницы и сохранения его в переменной. Другие модули независимых разработчиков предоставляют простые интерфейсы к приложениям электронной почты, FTP, сетевых новостей, а также к различным сетевым базам данных. Perl обладает также впечатляющей переносимостью. Большинство приложений, представленных в этой книге, могут работать без каких-либо изменений на платформах UNIX, Windows, Macintosh, VMS и OS/2. Однако самым убедительным аргументов в пользу применения языка Perl для разработки сетевых приложений является то, что он позволяет полностью воспользоваться всеми возможностями TCP/IP. Perl предоставляет полный доступ к тем же сетевым вызовам низкого уровня, которые доступны в программах C и других транслируемых языках. Он позволяет создавать приложения многоадресной рассылки, развертывать мультиплексные серверы и разрабатывать одноранговые системы. Этот язык дает возможность быстро создавать прототипы новых сетевых приложений и разрабатывать интерфейсы к существующим. А когда настанет время подготовить сетевое приложение на языке C или Java, программист Perl с восхищением обнаружит, какая значительная часть API-интерфейса Perl пересекается с этими языками. Для кого предназначена эта книгаКнига Разработка сетевых программ на Perl рассчитана на программистов Perl начального и среднего уровня. Автор предполагает, что читатель владеет основами программирования Perl, в частности, знает, как писать циклы, строить операторы if-else и создавать шаблоны регулярных выражений, а также имеет представление об автоматической переменной $_ и знает основы работы с массивами и хешами. Для успешного изучения этой книги необходимо иметь доступ к интерпретатору Perl и обладать определенным опытом написания, выполнения и отладки сценариев. Не менее важно также иметь доступ к компьютеру, подключенному и к локальной сети, и к Internet! Хотя для выполнения рекомендаций по автоматическому запуску сетевых серверов на основе Perl во время начальной загрузки компьютера, приведенных в главе 10, требуется доступ на уровне суперпользователя (администратора), все другие примеры этой книги могут быть выполнены без привилегированного доступа к компьютеру. В данной книге используются объектно-ориентированные средства Perl версии 5 и последующих версий, но материал большинства глав не требует глубоких знаний в области объектно-ориентированного программирования. В главе 1 приведены все сведения, необходимые для первого знакомства с объектами Perl. Здесь не представлен полный обзор протокола TCP/IP, вплоть до самого низкого уровня. Данная книга не может служить руководством по установке и настройке сетевых концентраторов, маршрутизаторов и серверов имен. Литература с описанием протокола TCP/IP и изложением вопросов сетевого администрирования приведена в Приложении Г, "Библиография". Краткий обзор содержания книгиЭта книга состоит из четырех основных частей. В части I, Основы, представлены основные сведения о сетевых средствах связи протокола TCP/IP.
В части II, Разработка клиентов для основных служб, рассматривается коллекция лучших модулей независимых разработчиков, которые были внесены в Полный сетевой архив Perl (CPAN).
В части III, Разработка систем TCP типа клиент/сервер (самой большой по объему), описаны возможности проектирования систем типа клиент/сервер на основе протокола TCP. В качестве основного примера в этих главах применяется психотерапевтический интерактивный сервер, созданный по образцу классической программы Eliza Джозефа Вейценбаума (Joseph Weizenbaum).
В части IV, Дополнительные темы, рассматриваются методы, которые предназначены для специализированных приложений.
Многочисленные версии PerlЛюбой перспективный проект проходит определенные этапы своего развития, и язык Perl, который пересматривался несколько раз на протяжении своего недолгого существования, не составляет исключения. В настоящей книге рассматривается Perl версии 5.X (рекомендуется версия 5.003 или последующая). Ко времени написания этого предисловия (август 2000 года) самой новой версией Perl была 5.6 и готовилась к выпуску версия 5.7. Автор предполагает, что язык Perl версий 5.8 и 5.9 (если они появятся) также будет совместимым с приведенными здесь примерами кода. Однако ведется работа по созданию Perl версии 6. В этой версии, которая должна выйти в виде первой альфа-версии в 2001 году, будут исправлены многие "странности" и недостатки ранних версий Perl. Но это может привести к нарушению работы большинства существующих сценариев. К счастью, разработчики языка Perl взяли на себя обязательства разработать инструментальные средства, позволяющие автоматически перенести существующие сценарии на версию 6. Учитывая это, автор попытался сделать примеры в этой книге универсальными и не применять в них наиболее сложные конструкции Perl. Совместимость с разными платформамиБолее серьезной проблемой являются различия между реализациями Perl в разных операционных системах. Perl начал свое развитие в системах UNIX (и Linux), а затем был перенесен на многие другие операционные системы, включая Microsoft Windows, Macintosh, VMS, OS/2, Plan9 и т.д. Сценарии, написанные на платформе Windows, могут работать в системе UNIX или Macintosh без изменений. Однако проблема состоит в том, что подсистема ввода-вывода (та часть операционной системы, которая управляет операциями ввода и вывода) обнаруживает наиболее существенные отличия на разных операционных системах. Это ограничивает возможность добиться полной переносимости системы ввода-вывода Perl. Хотя основные функциональные средства ввода-вывода Perl на разных платформах одинаковы, некоторые более сложные операции на платформах, отличных от UNIX, либо отсутствуют, либо имеют существенные отличия. Это, безусловно, влияет и на сетевое программирование, поскольку в основе работы сети лежит ввод и вывод данных. В примерах глав 1-9 применяются универсальные сетевые функции, которые работают одинаково на всех платформах. Исключением является последний пример в главе 5, в котором предусмотрен вызов функции fork(), не реализованной на платформе Macintosh, и часть вводного описания в главе 2, которое касается управления процессами в системе UNIX. Методы, описанные в этих главах, содержат все необходимое для написания подавляющего большинства клиентских программ и являются достаточными для создания и применения простого сервера. В главах 10-22 рассматриваются более сложные вопросы проектирования сервера. Ниже приведена таблица, которая позволяет узнать, какие средства, рассматриваемые в этих главах, поддерживаются в версиях Perl для UNIX, Windows или Macintosh.
(Условные обозначения: "+" - поддерживаемые средства; "-" - не поддерживаемые средства; "P" - частичная поддержка.) Обнадеживающим фактором является также то, что версии Perl для платформ, отличных от UNIX, быстро развиваются, и вполне возможно, что к тому времени, когда эта книга попадет в руки читателя, появятся многие новые средства. Получение текстов примеров кодаВсе примеры сценариев и модулей, приведенные в этой книге, можно получить на Web-узле в форматах ZIP и TAR/GZIP по адресу: http://www.modperl.com/perl_networking. На этой странице даны также инструкции по распаковке и установке исходного кода. Установка модулейМногие сетевые модули Perl уже включены в стандартный дистрибутив, а другие являются модулями независимых разработчиков, которые необходимо загрузить из Web и установить. Большинство модулей независимых разработчиков написано только на языке Perl, но некоторые из них, включая и упомянутые в этой книге, частично написаны на языке C и должны быть оттранслированы перед использованием. CPAN - это размещенная в Web большая коллекция модулей Perl, предоставленных в общее пользование. Доступ к этой коллекции может быть получен с помощью Web-броузера, клиента FTP или приложения с интерфейсом командной строки, встроенного в сам интерпретатор Perl. Установка модулей, полученных из WebЧтобы найти ближайший узел CPAN, введите в Web-броузере адрес: http://www.cpan.org/. Откроется страница, на которой можно выполнить поиск конкретных модулей или просмотреть весь список модулей, предоставленных в общее пользование, который может быть отсортирован разными способами. Отыскав нужный вам модуль, загрузите его на локальный компьютер. Модули Perl распространяются в виде архивов tar, сжатых программой gzip. Их можно распаковать следующим образом.
После распаковки архива перейдите во вновь созданный каталог и введите команду perl Makefile.PL, make, make test и make install. В результате будет выполнена сборка, проверка и установка модуля.
В системах UNIX для выполнения последнего этапа могут потребоваться права суперпользователя. Не имея таких прав, вы можете установить модули только в своем рабочем каталоге. На этапе выполнения команды perl Makefile.PL укажите в параметре PREFIX= путь к своему рабочему каталогу. Например, если путь к рабочему каталогу - /home/jdoe, необходимо ввести следующее. % perl Makefile.PL PREFIX=/home/jdoe Остальная часть процедуры установки аналогична описанной выше. При использовании каталога установки, определяемого пользователем, необходимо указать интерпретатору Perl, в каком каталоге должен выполняться поиск установленных модулей. Одним из способов этого является включение имени этого каталога в переменную среды PERL5LIB.
Еще один способ состоит в размещении следующей строки в начале каждого сценария, в котором применяется установленный модуль. use lib '/home/jdoe'; Установка модуля из командной строкиБолее простым способом выполнения установки модуля является использование замечательной командной оболочки CPAN Андреаса Кенига (Andreas Koenig). Она позволяет найти, загрузить, собрать и установить необходимый модуль Perl с помощью простой командной оболочки. Все эти действия выполняет команда install.
Установка модулей с помощью диспетчера пакетов PerlВо всех этих примерах предполагается наличие на компьютере версий программ gzip, tar и make, совместимых с UNIX. В стандартных системах Windows эти утилиты отсутствуют. Пакет Cygwin, который может быть получен по адресу: http://www.cygnus.com/cygwin/, предоставляет указанные утилиты в составе полного набора инструментальных средств, совместимых с UNIX. Однако проще применить диспетчер пакетов Perl (PPM - Perl Package Manager), разработанный компанией ActiveState. Эта программа представляет собой сценарий Perl, устанавливаемый по умолчанию в составе дистрибутива Perl компании ActiveState, который может быть получен по адресу: http://www.activestate.com. Интерфейс этой программы аналогичен интерфейсу командной строки оболочки CPAN, показанному в предыдущем разделе, за исключением того, что он позволяет устанавливать не только сценарии на языке Perl, но и заранее оттранслированные программы и библиотеки.
Установка модулей с узла MacPerlУзел MacPerl Module Porters, находящийся по адресу: http://pudge.net/cgi-bin/mmp.plx, содержит ряд модулей, предназначенных для использования в дистрибутиве MacPerl. Разработан также ряд вспомогательных программ, позволяющих упростить установку модулей в системе Macintosh. Эти пакеты описаны на странице http://pudge.net/macperl/macperlmodinstall.html, где также даны инструкции по их загрузке и установке. Оперативная документацияВ настоящей книге приведены ссылки не только на книги и Web-узлы, но и на два других важных источника оперативной информации: документы RFC Internet и документацию POD Perl. Документы RFC InternetДокументы, которые по традиции носят название RFC (Requests for Comment - Запросы на комментарии), выпущены Проблемной группой проектирования Internet (IETF - Internet Engineering Task Force). Здесь даны спецификации всех основных протоколов Internet. Эти документы пронумерованы последовательно. Например, RFC 1927, Suggested Additional MIME Types for Associating Documents. (Предлагаемые дополнительные типы MIME для обозначения документов), был 1927-м документом RFC, выпущенным этой комиссией. Некоторые из этих документов в конечном итоге становятся стандартами Internet, и в этом случае им присваивают имя STD и последовательный номер. Однако большинство из них так и остается "предложениями к обсуждению". Но даже несмотря на то, что такие документы RFC не утверждены официально, они могут применяться для изучения деталей устройства сетевых протоколов и проверки правильности конкретной реализации. Копии архивов RFC хранятся на многих зеркальных узлах в Internet и ведутся несколькими организациями в форме, обеспечивающей удобный поиск. Один из наилучших архивов ведется на узле http://www.faqs.org/rfcs/. Для получения RFC с этого узла перейдите на указанную страницу и введите номер требуемого RFC в текстовом поле Display the document by number. Документ будет доставлен в форме с минимальным применением разметки HTML. На этой странице можно также выполнять поиск стандартов, а также искать документы в архиве по ключевым словам и фразам. Если вы предпочитаете чисто текстовую форму, то на узле www.faqs.org есть ссылка на FTP-узел, где можно найти и загрузить документы в их первоначальной форме RFC. "Добрая старая" документацияЗначительная часть внутренней документации Perl представлена в формате POD (Plain Old Documentation - "Добрая старая" документация). Этот формат в основном представляет собой обычный текст, в который вставлено несколько элементов разметки для обозначения заголовков, подзаголовков и структурированных списков. Во время установки Perl выполняется также установка документации POD. Файлы POD находятся в подкаталоге pod библиотечного каталога Perl. Эти документы можно читать непосредственно либо необходимо использовать сценарий perldoc для их форматирования и отображения в текстовом виде в программе постраничного просмотра, такой как more. Для использования perldoc введите эту команду и имя нужного файла POD. Обычно лучше всего начать с оглавления Perl, perltoc. % perldoc perltoc В результате появится список страниц POD, которые можно вывести на экран. Для получения краткой справки по конкретной функции Perl можно вызвать сценарий perldoc с флажком -f. Например, чтобы получить справку по функции socket(), введите следующее. % perldoc -f socket В дистрибутив MacPerl для компьютера Macintosh входит вспомогательное приложение shuck. Оно предоставляет средства просмотра POD с помощью справочного меню MacPerl. БлагодарностиГоворят, что работа редактора, прежде всего, учит терпению, но мне кажется, что Карэн Геттмен (Karen Gettman) родилась с этим качеством. Она действительно могла бы потерять выдержку, когда я в очередной раз заявлял: "Обязательно закончу книгу через пару недель", и это тянулось месяцами. Однако она никогда не показывала своего недовольства, хотя я уверен, что ей приходилось выдерживать все более жесткое давление со стороны производственного и маркетингового персонала издательства. Карэн, я не нахожу слов, чтобы выразить свою признательность! Хочу также поблагодарить Мэри Харт (Mary Hart), помощника редактора, которая отвечала за подготовку моей книги. Я работал с Мэри над другими проектами и знаю, что только неустанные усилия таких сотрудников, как она, обеспечивают бесперебойную и эффективную работу издательства Addison-Wesley. Весьма признателен техническим рецензентам, которые так внимательно следили за тем, чтобы я не допустил ни одной ошибки: Йону Орванту (Jon Orwant), Джеймсу Ли (James Lee), Гарри Хоххейзеру (Harry Hochheiser), Роберту Колстеду (Robert Kolstad), Сандеру Валсу (Sander Wahls) и Меган Конклин (Megan Conklin). Книга стала гораздо лучше благодаря вашим усилиям. Выражаю свою благодарность терпеливым сотрудникам моей лаборатории - Рави, Дэвиду, Марко, Хонгу, Гуанмин, Натали и Питеру; они как-то ухитрялись продолжать начатое дело даже в течение последних месяцев подготовки рукописи, когда мои утренние опоздания становились все более продолжительными. И конечно, хочу сказать спасибо моей жене, Джин, которая уже пережила вместе со мной выпуск нескольких проектов и знает, что я не каждый день могу с ней посидеть за одним обеденным столом. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 1992-2007 Издательская группа "Диалектика-Вильямс"
|