Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Java Удаленный Вызов метода


10.6 Протокол Мультиплексирования RMI

Цель мультиплексировать состоит в том, чтобы обеспечить модель, где две конечных точки могут каждый открыть многократные полнодуплексные соединения с другой конечной точкой в среде, где только одна из конечных точек в состоянии открыть такое двунаправленное соединение, используя некоторое другое средство (например, соединение TCP). Использование RMI этот простой протокол мультиплексирования, чтобы позволить клиенту соединяться с серверный объектом RMI в некоторых ситуациях, где это иначе не возможно. Например, некоторые менеджеры безопасности для сред апплета не разрешают созданию сокетов сервера прислушиваться к входящим соединениям, таким образом предотвращая такие апплеты, чтобы экспортировать объекты RMI и службу удаленные вызовы от прямых сокетных соединений. Если апплет может открыть нормальное сокетное соединение со своим узлом кодовой базы, однако, то он может использовать протокол мультиплексирования по тому соединению, чтобы позволить узлу кодовой базы вызывать методы на объекты RMI, экспортируемые апплетом. Этот раздел описывает как формат и правила протокола мультиплексирования.


10.6.1 Определения

Это разделяет, дает определение некоторым словам, поскольку они используются в остальной части описания протокола.

Конечная точка является одним из двух пользователей соединения, используя протокол мультиплексирования.

Протокол мультиплексирования должен уровень сверху одного существующего двунаправленного, надежного потока байтов, по-видимому инициируемого одной из конечных точек к другому. В текущем использовании RMI это всегда - соединение TCP, сделанное с a java.net.Socket объект. Это соединение будет упоминаться как конкретное соединение.

Протокол мультиплексирования облегчает использование виртуальных соединений, которые являются самостоятельно двунаправленными, надежными потоками байтов, представляя определенный сеанс между двумя конечными точками. Набор виртуальных соединений между двумя конечными точками по единственному конкретному соединению включает мультиплексированное соединение. Используя протокол мультиплексирования, виртуальные соединения могут быть открыты и закрыты любой конечной точкой. Состояние виртуального соединения относительно данной конечной точки определяется элементами протокола мультиплексирования, которые отправляются и получаются по конкретному соединению. Такое состояние включает, если соединение открыто или закрывается, фактические данные, которые были переданы через, и связанные механизмы управления потоками. Если не иначе квалифицированный, термин соединение, используемое в остатке от этого раздела, означает виртуальное соединение.

Виртуальные соединения в пределах данного мультиплексированного соединения идентифицируется целым числом на 16 битов, известным как идентификатор соединения. Таким образом там существуйте 65 536 возможных виртуальных соединений в одном мультиплексированном соединении. Реализация может ограничить число этих виртуальных соединений, которые могут использоваться одновременно.


10.6.2 Государство соединения и Управление потоками

Соединениями управляют, используя различные операции, определенные протоколом мультиплексирования. Следующее является именами операций, определенных протоколом: ОТКРЫТЫЙ, БЛИЗКО, CLOSEACK, ЗАПРОС, и ПЕРЕДАЧА. Точный формат и правила для всех операций детализируются в Разделе 10.6.3, "Формат Протокола."

ОТКРЫТОЕ, БЛИЗКО, и операции CLOSEACK управляют соединениями, становящимися открытыми и закрытыми, в то время как ЗАПРОС и ПЕРЕДАЕТ операции, используются, чтобы передать данные через открытое соединение в пределах ограничений механизма управления потоками.


Государства соединения

Виртуальное соединение открыто относительно определенной конечной точки, если конечная точка отправила Операцию открытия за тем соединением, или это получило Операцию открытия для того соединения (и это не было впоследствии закрыто). Различные операции протокола описываются ниже.

Виртуальное соединение находится на рассмотрении близко относительно определенной конечной точки, если конечная точка отправила Операцию закрытия за тем соединением, но это еще не получило последующую БЛИЗКУЮ или работу CLOSEACK для того соединения.

Виртуальное соединение закрывается относительно определенной конечной точки, если оно никогда не открывалось, или если оно получило ЗАВЕРШЕНИЕ или работу CLOSEACK для того соединения (и оно не было впоследствии открыто).


Управление потоками

Протокол мультиплексирования использует простой делающий пакет механизм управления потоками, чтобы позволить многократным виртуальным соединениям существовать параллельно по тому же самому конкретному соединению. Высокоуровневое требование механизма управления потоками - то, что состояние всех виртуальных соединений независимо; состояние одного соединения, возможно, не влияет на поведение других. Например, если буферы данных, обрабатывающие данные, входящие от одного соединения, становятся полными, это не может предотвратить передачу и обработку данных для любого другого соединения. Это необходимо, если бы продолжение одного соединения зависит от завершения использования другого соединения, того, которое произошло бы с рекурсивными вызовами RMI. Поэтому, практическая импликация - то, что реализация должна всегда быть в состоянии использовать и обработать все данные протокола мультиплексирования, готовые к вводу на конкретном соединении (предполагающий, что это соответствует этой спецификации).

Каждой конечной точке связали значения с двумя состояниями с каждым соединением: сколько байтов данных конечная точка запросила, но не получила (входное количество запроса) и сколько байтов другая конечная точка запросила, но не была предоставлена этой конечной точкой (выходное количество запроса).

Выходное количество запроса конечной точки увеличивается, когда оно получает работу ЗАПРОСА от другой конечной точки, и оно уменьшается, когда оно отправляет работу ПЕРЕДАЧИ. Входное количество запроса конечной точки увеличивается, когда оно отправляет работу ЗАПРОСА, и оно уменьшается, когда оно получает работу ПЕРЕДАЧИ. Это - нарушение протокола, если любое из этих значений становится отрицательным.

Это - нарушение протокола для конечной точки, чтобы отправить работу ЗАПРОСА, которая увеличила бы ее входное количество запроса до большего количества байтов, которые это может в настоящий момент обработать без блокирования. Это должно, однако, удостовериться, что его входное количество запроса больше чем нуль, если пользователь соединения ожидает, чтобы считать данные.

Это - нарушение протокола для конечной точки, чтобы отправить работу ПЕРЕДАЧИ, содержащую больше байтов что ее выходное количество запроса. Это может буферизовать исходящие данные, пока пользователь соединения не запрашивает те данные, записанные соединению быть явно сброшенным. Если данные должны быть отправлены по соединению, однако, или явным сбросом или потому что буферы вывода реализации полны, то пользователь соединения может быть блокирован, пока достаточные операции ПЕРЕДАЧИ не могут продолжиться.

Вне правил, обрисованных в общих чертах выше, реализации свободны отправить ЗАПРОС и операции ПЕРЕДАЧИ как считавший соответствующим. Например, конечная точка может запросить больше данных для соединения, даже если его входной буфер не пуст.


10.6.3 Формат протокола

Формат потока байтов протокола мультиплексирования состоит из непрерывной серии записей переменной длины. Первый байт записи является кодом работы, который идентифицирует работу записи и определяет формат остальной части его контента. Следующие юридические коды работы определяются:

значение

имя

0xE1

ОТКРЫТЫЙ

0xE2

БЛИЗКО

0xE3

CLOSEACK

0xE4

ЗАПРОС

0xE5

ПЕРЕДАЧА

Это - нарушение протокола, если первый байт записи не является одним из определенных кодов работы. Следующие разделы описывают формат записей для каждого кода работы.


Операция открытия

Это - формат для записей Операции открытия:

размер (байты)

имя

описание

1

код операции

(ОТКРЫТЫЙ) код работы

2

ID

идентификатор соединения

Конечная точка отправляет Операцию открытия, чтобы открыть обозначенное соединение. Это - нарушение протокола, если ID обращается к соединению, которое является в настоящий момент открытым или завершением на ожидании относительно передающей конечной точки. После того, как соединение открывается, оба ввода и состояния количества запроса для соединения являются нулем для обеих конечных точек.

Получение Операции открытия указывает, что другая конечная точка открывает обозначенное соединение. После того, как соединение открывается, оба состояния количества запроса входа и выхода для соединения являются нулем для обеих конечных точек.

Чтобы предотвратить коллизии идентификатора между этими двумя конечными точками, пространство допустимых идентификаторов соединения разделяется пополам, в зависимости от значения старшего значащего бита. Каждой конечной точке только позволяют открыть соединения с определенным значением для высокого бита. Конечная точка, которая инициировала конкретное соединение, должна только открыть соединения с высоким набором битов в идентификаторе, и другая конечная точка должна только открыть соединения с нулем в высоком бите. Например, если апплет RMI, который не может создать сокет сервера, инициирует мультиплексированное соединение со своим узлом кодовой базы, апплет может открыть виртуальные соединения в диапазоне идентификатора 0x8000-7FFF, и сервер может открыть виртуальное соединение в 0-0x7FFF диапазоне идентификатора.


Операция закрытия

Это - формат для записей Операции закрытия:

размер (байты)

имя

описание

1

код операции

(ОТКРЫТЫЙ) код работы

2

ID

идентификатор соединения

Конечная точка отправляет Операцию закрытия, чтобы закрыть обозначенное соединение. Это - нарушение протокола, если ID обращается к соединению, которое в настоящий момент закрывается или завершение на ожидании относительно передающей конечной точки (это может находиться на рассмотрении близко относительно конечной точки получения, если это также отправило Операцию закрытия за этим соединением). После отправки ЗАВЕРШЕНИЯ соединение становится на ожидании близкий для передающей конечной точки. Таким образом это, возможно, не вновь открывает соединение, пока это не получило ЗАВЕРШЕНИЕ или CLOSEACK для этого от другой конечной точки.

Получение Операции закрытия указывает, что другая конечная точка закрыла обозначенное соединение, и это таким образом становится закрытым на конечной точке получения. Хотя конечная точка получения, возможно, больше не отправляет операции за этим соединением (пока это не открывается снова), это все еще должно обеспечить данные во входных буферах реализации читателям соединения. Если соединение ранее было открыто вместо ожидания близко, конечная точка получения должна ответить работой CLOSEACK для соединения.


Работа CLOSEACK

Следующее является форматом для записей с работой CLOSEACK:

размер (байты)

имя

описание

1

код операции

(ОТКРЫТЫЙ) код работы

2

ID

идентификатор соединения

Конечная точка отправляет работу CLOSEACK, чтобы подтвердить Операцию закрытия от конечной точки получения. Это - нарушение протокола, если ID обращается к соединению, которое не находится на рассмотрении близко для конечной точки получения, когда работа получается.

Получение работы CLOSEACK изменяет состояние обозначенного соединения от ожидания близко к закрытому, и таким образом соединение может быть вновь открыто в будущем.


Работа ЗАПРОСА

Это - формат для записей работы ЗАПРОСА:

размер (байты)

имя

описание

1

код операции

(ОТКРЫТЫЙ) код работы

2

ID

идентификатор соединения

4

количество

число дополнительных байтов требуют

Конечная точка отправляет работу ЗАПРОСА, чтобы увеличиться, ее входной запрос значат обозначенное соединение. Это - нарушение протокола, если ID не обращается к соединению, которое открыто относительно передающей конечной точки. Входное количество запроса конечной точки постепенно увеличивается количеством значения. Значение количества является целым числом на 32 бита со знаком, и это - нарушение протокола, если это отрицательно или нуль.

Получение работы ЗАПРОСА заставляет выходной счет запроса для обозначенного соединения увеличиваться количеством. Если соединение находится на рассмотрении рядом с конечной точкой получения, то любые операции ЗАПРОСА могут быть проигнорированы.


Работа ПЕРЕДАЧИ

Это - формат для записей работы ПЕРЕДАЧИ.

размер (байты)

имя

описание

1

код операции

(ОТКРЫТЫЙ) код работы

2

ID

идентификатор соединения

4

количество

число байтов в передаче

количество

данные

данные передачи

Конечная точка отправляет работу ПЕРЕДАЧИ, чтобы фактически передать данные по обозначенному соединению. Это - нарушение протокола, если ID не обращается к соединению, которое открыто относительно передающей конечной точки. Выходное количество запроса конечной точки постепенно уменьшается количеством значения. Значение количества является целым числом на 32 бита со знаком, и это - нарушение протокола, если это отрицательно или нуль. Это - также нарушение протокола, если работа ПЕРЕДАЧИ заставила бы выходное количество запроса передающей конечной точки становиться отрицательным.

Получение работы ПЕРЕДАЧИ заставляет байты количества данных быть добавленными к очереди байтов, доступных для чтения из соединения. Входное количество запроса конечной точки получения постепенно уменьшается количеством. Если это заставляет входное количество запроса становиться нулем, и пользователь соединения пытается считать больше данных, конечная точка должна ответить другой работой ЗАПРОСА. Если соединение находится на рассмотрении рядом с конечной точкой получения, то любые операции ПЕРЕДАЧИ могут быть проигнорированы.


Нарушения протокола

Если нарушение протокола происходит, как определено выше или если коммуникационная ошибка обнаруживается в конкретном соединении, то мультиплексированное соединение выключено. Реальное соединение завершается, и все виртуальные соединения становятся закрытыми сразу. Данные, уже доступные для чтения из виртуальных соединений, могут быть считаны пользователями соединений.



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Авторское право © (c) 1997,2006, Oracle и/или его филиалы. Все права защищены.