
116 Глава 2. Связь
Реализация ссылок на объекты
Очевидно, что ссылки на объекты должны содержать достаточно информации,
чтобы обеспечить клиентам привязку к объекту. Простая ссылка на объект должна
содержать сетевой адрес машины, на которой paзмeп^eн реальный объект, вместе
с конечной точкой, определяющей сервер, который управляет объектом, и указа-
нием на то, что это за объект. Последний обычно представляется сервером, на-
пример, в форме 16-битного числа. Конечная точка в данном случае абсолютно
такая же, как и та, что обсуждалась при рассмотрении системы DCE RPC. На
практике она соответствует локальному порту, который динамически выделяется
локальной операционной системой сервера. Однако эта схема имеет мрюжество
недостатков.
Во-первых, если в сервере произойдет сбой и после восстановления сервер
получит другую конечную точку, все ссылки на объекты станут неправильными.
Эту проблему можно решить так же, как это сделано в DCE: создать на машине
локального демона, который будет опрашивать известные конечные точки и от-
слеживать назначения конечных точек серверам в таблице конечных точек. По-
сле привязки клиента к объекту мы первым делом запросим у демона текущую
конечную точку сервера. Такой подход требует, чтобы мы кодировали идентр!-
фикатор сервера в ссылке на объект, которая может использоваться в качестве
индекса в таблице конечных точек. Сервер, в свою очередь, всегда должен реги-
стрироваться локальным демоном.
Однако кодирование сетевого адреса машины сервера в ссылке на объект
—
вообще говоря, плохая идея. Проблема подобного подхода — в том, что сервер
невозможно будет перенести на другую машину, не объявив недеР1Ствительными
все ссылки на объекты, которыми он управлял. Традиционное решение этой
проблемы состоит в распространении идеи локальных демонов, поддерживаю-
щих таблицы конечных точек, на сервер локализации {location server)^ следящрш
за постоянной работой серверов, на которых расположены объекты. Ссылка на
объект в результате должна содержать сетевой адрес сервера локализации, а так-
же действующий в системе идентификатор сервера. Как мы увидим в главе 4, это
решение также имеет множество недостатков, особенно по части масштабируе-
мости.
До настоящего момента мы в тактических \1елях предполагали, что клиент
и сервер уже были каким-то образом сконфигурированы под единый стек прото-
колов. При этом предполагается, что они используют не только общий транс-
портный протокол, такой как TCP, но также и общий протокол маршалинга и де-
маршалинга параметров сообщения. Они должны также пользоваться общим
протоколом для установки исходного соединения, обработки ошибок, контроля
потока и пр.
Мы можем осторожно отбросить это допущение, если предположим, что к
ссылке на объект добавляется дополнительная информация. Такая информация
может включать указание на используемый для привязки к объекту протокол,
который поддерживается сервером объекта. Так, например, некоторый сервер
может одновременно поддерживать прием данных по протоколу TCP и дейта-