Файловая система Gopher
Файловая система Gopher была разработана для реализации распределенной базы документов, которые хранятся на машинах сети и предоставляются пользователю в виде единой иерархической файловой системы. Модель файловой системы наилучшим образом подходит для отображения структуры хранения документов по следующим очевидным соображениям:
иерархическое представление данных привычно большинству пользователей, так как иерархии широко используются во многих компьютерных представлениях (UNIX, MS-DOS, системах BBS);
Gopher рассчитан на применение недорогих решений как в аппаратной части, так и при программировании, поскольку первоначально он был ориентирован на разработку информационной системы университета (шт. Миннесота). Система соответствовала реальной структуре университета с его делением на факультеты и кафедры, что также хорошо описывается иерархической моделью данных;
модель файловой системы может быть легко расширена путем добавления к традиционным файлам и директориям других объектов, которые можно назвать виртуальными файлами. Такие виртуальные объекты могут быть поисковыми запросами, или шлюзами, в другие информационные ресурсы Internet. Вначале система ориентировалась на два типа виртуальных файлов, добавленных к основным: информационный поиск по ключевым словам и записные/телефонные книжки.
Gopher представляет весь Internet (серверы Gopher) в виде единой иерархической системы. Gopher-серверы объединены в единое информационное пространство в Internet. Многие архивы дублируют информацию из других архивов (так называемые «зеркала» — mirrors).
Gopher считается простой системой, легкой в установке и администрировании, достаточно надежной и защищенной. Количество серверов Gopher на 1994 г. превышало в 1,5 раза число серверов WWW, и до 1995 г. темпы роста установок серверов Gopher опережали все остальные ресурсы Internet. В России Gopher-серверы распространены не так широко, как во всем мире, — пользователи предпочитают World Wide Web.
Протокол Gopher предназначен для работы по модели «клиент — сервер», при этом программа-клиент установлена на рабочем месте пользователя. Эта программа посылает запрос-селектор в ТСР-порт (строку текста, которая может быть и пустой), а затем сервер отвечает блоком текста, в конце которого стоит точка. Никакой информации о состоянии соединения сервер клиенту не сообщает и, в свою очередь, не запрашивает. После ответа сервера соединение разрывается, а при новом запросе оно должно быть установлено заново. Простота этого алгоритма позволяет реализовать его даже на маломощных персональных компьютерах.
Возвращаемый сервером текст представляет собой справку о содержании текущей директории (каталога), каждый элемент которой включает:
тип (объекта в директории);
имя (используется для отображения и в запросах);
неотображаемую строку выбора, которая обычно описывает путь, используемый удаленным хостом для доступа к объекту (селектор);
имя хоста (машины, к которой надо обращаться за информацией);
номер порта (на котором сервер данного объекта ожидает запрос).
Пользователь реально видит только имя объекта. Программа-клиент может воспользоваться триадой селектор, хост, порт для поиска каждого объекта.
Для использования поискового объекта из директории Gopher клиент посылает запрос специальному поисковому серверу Gopher. В этом случае клиент посылает серверу строку-селектор и ключевые слова, а получает от сервера список адресов документов, удовлетворяющих запросу.
Программы, обслуживающие взаимодействие по протоколу Gopher, существуют практически для всех типов компьютерных платформ.
Модель взаимодействия Gopher основывается на архитектуре «клиент — сервер». Сервер ожидает запросы пользователя по назначенному порту TCP (по умолчанию это порт 70), а клиент посылает в этот порт запросы.
Первый символ каждой строки определяет тип ресурса — документ, каталог или поисковый критерий (соответственно цифры 0,1,7). Все остальные символы после кода типа до первого символа табуляции задают отображаемую в дереве виртуальной файловой системы информацию. Интерфейсы-клиенты отображают эту информацию в виде идентификатора входа в элемент файловой системы. Тип информации обычно может отображаться в виде изображения (иконки) соответствующего типа в графических интерфейсах или символа. Таким образом пользователю дается подсказка, с каким типом данных или программ он будет иметь дело, если выберет тот или иной вход в виртуальную файловую систему Gopher. Следующее за идентификатором поле — строка-селектор, которую клиент отсылает на сервер, если пользователь выбрал данный вход.
За селектором следует доменный адрес Gopher-сервера, затем номер порта, по которому осуществляется взаимодействие. Обычно это порт 70, но можно указать и другой, на котором есть обслуживание Gopher-клиента.
Рассмотрим более подробно детали взаимодействия по протоколу Gopher, начиная с адресации ресурсов Gopher.
Адрес информационного ресурса . Документы или любые другие объекты, с которыми работает система, определяются триадой строка-селектор, доменный адрес сервера и порт. Предполагается, что существует сервер верхнего уровня, в котором зарегистрированы серверы нижнего уровня (центральный сервер, в котором регистрируются другие серверы). При такой организации виртуальная файловая система Gopher совпадает с топологией сети компьютеров организации. Следует отметить, что строгое соблюдение иерархии не является обязательным. Серверы нижнего уровня могу ссылаться друг на друга непосредственно, а не через сервер верхнего уровня. Из этого следует, что физическая структура связей Gopher может иметь форму графа произвольного типа, а не только дерева.
Переносимость и имена . При реализации Gopher-сети рекомендуется использовать механизм синонимов. Доменные имена в сети могут меняться (гораздо реже, чем IP-адреса, но это все-таки возможно). Синоним можно связать с любым новым именем, и это не приведет к разрушению дерева Gopher. Изменять же во всех документах старые имена на новые — работа довольно трудоемкая, а иногда и невыполнимая, поскольку какой-то сервер может оказаться за пределами ответственности одного администратора.
Взаимодействие с администратором сервера . Рекомендуется на каждом сервере иметь документы, которые указывают адреса и способы взаимодействия с администрацией сервера. Это документы типа «О нашем сервере». Обычно такой документ размещается в головной директории и доступен при первом входе на сервер. В этом документе даются краткое описание информации, которую хранит сервер, и координаты администратора. Это помогает организовать обратную связь с пользователями сервера.
Подключение дополнительных ресурсов. Первый символ каждой строки определяет тип единицы хранения информации в виртуальной файловой системе сервера. Возможно использование других типов, позволяющих работать с различными ресурсами сети (FTP, Telnet, WWW) Такой подход позволяет разгрузить Gopher, если число обращений к серверу велико. Кроме того, сам Gopher-сервер будет избавлен от необходимости реализации большого количества протоколов и может передоверить их обслуживание специализированным программам. Обычно обслуживание сторонних протоколов реализуется за счет запуска параллельных задач, которые работают с указанным ресурсом. Реально это позволяет организовать многооконный интерфейс к ресурсам Internet.
С другой стороны, доступ к ресурсам сети может быть осуществлен и при помощи другого механизма, который называют шлюзом. Существуют шлюзы Gopher-FTP, Gopher-WAIS, Gopher-WWW и др. Разница между первым и вторым способами заключается в том, что при вызове внешней программы и сессии Gopher и другие сессии существуют параллельно. При шлюзовой технологии все взаимодействия осуществляются через сервер Gopher.
Программы-клиенты. Программа-клиент посылает строку-селектор серверу для того, чтобы получить от него ответ на этот запрос. Сервер может не только управлять файлами или директориями, но и содержать другую информацию, а также другие серверы. Клиент обычно имеет стек, в котором хранится информация о пути обхода дерева Gopher. Такая информация необходима для «отката» .
Некоторые клиенты сохраняют не только информацию о пройденных узлах, но и тексты этих узлов. Такой подход позволяет сократить время обращения к документу и разгружает сеть.
Часто случается, что серверы верхнего уровня перегружены запросами. В этом случае время ожидания ответа становится неприемлемым. Однако обычно клиент имеет возможность выбора между разными серверами, которые имеют доступ к одному и тому же ресурсу. В этом случае клиент должен вести статистику обращений к различным серверам, которая может быть использована для выбора сервера автоматически или после соответствующей команды пользователя. Серверы, которые обеспечивают доступ к одним и тем же ресурсам, называют клоном. При использовании клона администратор рекомендует использовать случайный поиск сервера, что приводит к разгрузке каждого отдельного сервера и уменьшению времени отклика.
Gopher-серверы. Известны два вида стандартных серверов: обычные, или общие, серверы, обеспечивающие доступ к ресурсам файловой системы (файлам и директориям), и поисковые серверы, которые выполняют запросы, составленные из ключевых слов.
При использовании обычного сервера строка-селектор может быть именем файла или директории. Она никак не преобразуется при обмене по протоколу Gopher, и ее интерпретация целиком зависит от алгоритмов, реализованных в сервере.
Известны два специальных сервера Gopher, телефонный справочник (тип 2), работающий по протоколу CSO, и поисковый сервер (тип 7).
Сервер CSO был разработан для поддержки телефонной книги Университета Миннесоты и широко не применяется.
Поисковый сервер в ответ на запрос возвращает список документов, удовлетворяющих запросу. Если результат поиска необходимо обновить, то запрос обязательно надо выполнить заново, так как информация из буфера не соответствует текущему состоянию системы. Наиболее часто в качестве поисковых серверов используются WAIS и Veronica.