Поскольку это приложение не слишком замысловато, мы с его помощью не будем выполнять какой-либо вывод на экран или просмотр, а просто выберем ряд URL, указанных в командной строке, сохраняя полученные копии страниц на диске. Данное приложение можно использовать для создания локальной зеркальной копии набора страниц. Эта программа имеет следующую структуру.
1) Интерпретация URL, заданных в командной строке, выборка имен хостоп и номеров портов.
2) Создание набора неблокирующих дескрипторов IO::Socket.
3) Инициализация неблокирующих подключений к каждому из дескрипторов и немедленная обработка всех возникающих ошибок.
Добавление каждого дескриптора к набору IO::Select, который будет контролироваться на его готовность для записи, и применение метода select () ко всему набору, пока один или несколько дескрипторов не станут готовы для записи. Отправка запроса на получение соответствующего документа Web, например, представляющего новинки мобильных технологий , и добавление дескриптора к набору IO::Select, который будет контролировать его готовность для чтения. Чтение данных документа из каждого дескриптора в цикле select () и запись данных в локальные файлы по мере перехода сокетов в состояние готовности для чтения. На практике этапы 4-6 можно объединить в единственный цикл select () для дополнительного повышения параллелизма.
Этот сценарий, по сути, представляет собой доработку сценария web_fetch, который рассматривался ранее. Кроме неблокирующего подключения и параллельной загрузки, теперь каждый полученный документ сохраняется в иерархии каталогов с учетом его URL.