Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
Конечная точка является одним из двух пользователей соединения, используя протокол мультиплексирования.
Протокол мультиплексирования должен уровень сверху одного существующего двунаправленного, надежного потока байтов, по-видимому инициируемого одной из конечных точек к другому. В текущем использовании RMI это всегда - соединение TCP, сделанное с a java.net.Socket
объект. Это соединение будет упоминаться как конкретное соединение.
Протокол мультиплексирования облегчает использование виртуальных соединений, которые являются самостоятельно двунаправленными, надежными потоками байтов, представляя определенный сеанс между двумя конечными точками. Набор виртуальных соединений между двумя конечными точками по единственному конкретному соединению включает мультиплексированное соединение. Используя протокол мультиплексирования, виртуальные соединения могут быть открыты и закрыты любой конечной точкой. Состояние виртуального соединения относительно данной конечной точки определяется элементами протокола мультиплексирования, которые отправляются и получаются по конкретному соединению. Такое состояние включает, если соединение открыто или закрывается, фактические данные, которые были переданы через, и связанные механизмы управления потоками. Если не иначе квалифицированный, термин соединение, используемое в остатке от этого раздела, означает виртуальное соединение.
Виртуальные соединения в пределах данного мультиплексированного соединения идентифицируется целым числом на 16 битов, известным как идентификатор соединения. Таким образом там существуйте 65 536 возможных виртуальных соединений в одном мультиплексированном соединении. Реализация может ограничить число этих виртуальных соединений, которые могут использоваться одновременно.
ОТКРЫТОЕ, БЛИЗКО, и операции CLOSEACK управляют соединениями, становящимися открытыми и закрытыми, в то время как ЗАПРОС и ПЕРЕДАЕТ операции, используются, чтобы передать данные через открытое соединение в пределах ограничений механизма управления потоками.
Виртуальное соединение находится на рассмотрении близко относительно определенной конечной точки, если конечная точка отправила Операцию закрытия за тем соединением, но это еще не получило последующую БЛИЗКУЮ или работу CLOSEACK для того соединения.
Виртуальное соединение закрывается относительно определенной конечной точки, если оно никогда не открывалось, или если оно получило ЗАВЕРШЕНИЕ или работу CLOSEACK для того соединения (и оно не было впоследствии открыто).
Каждой конечной точке связали значения с двумя состояниями с каждым соединением: сколько байтов данных конечная точка запросила, но не получила (входное количество запроса) и сколько байтов другая конечная точка запросила, но не была предоставлена этой конечной точкой (выходное количество запроса).
Выходное количество запроса конечной точки увеличивается, когда оно получает работу ЗАПРОСА от другой конечной точки, и оно уменьшается, когда оно отправляет работу ПЕРЕДАЧИ. Входное количество запроса конечной точки увеличивается, когда оно отправляет работу ЗАПРОСА, и оно уменьшается, когда оно получает работу ПЕРЕДАЧИ. Это - нарушение протокола, если любое из этих значений становится отрицательным.
Это - нарушение протокола для конечной точки, чтобы отправить работу ЗАПРОСА, которая увеличила бы ее входное количество запроса до большего количества байтов, которые это может в настоящий момент обработать без блокирования. Это должно, однако, удостовериться, что его входное количество запроса больше чем нуль, если пользователь соединения ожидает, чтобы считать данные.
Это - нарушение протокола для конечной точки, чтобы отправить работу ПЕРЕДАЧИ, содержащую больше байтов что ее выходное количество запроса. Это может буферизовать исходящие данные, пока пользователь соединения не запрашивает те данные, записанные соединению быть явно сброшенным. Если данные должны быть отправлены по соединению, однако, или явным сбросом или потому что буферы вывода реализации полны, то пользователь соединения может быть блокирован, пока достаточные операции ПЕРЕДАЧИ не могут продолжиться.
Вне правил, обрисованных в общих чертах выше, реализации свободны отправить ЗАПРОС и операции ПЕРЕДАЧИ как считавший соответствующим. Например, конечная точка может запросить больше данных для соединения, даже если его входной буфер не пуст.
значение |
имя |
---|---|
0xE1 |
ОТКРЫТЫЙ |
0xE2 |
БЛИЗКО |
0xE3 |
CLOSEACK |
0xE4 |
ЗАПРОС |
0xE5 |
ПЕРЕДАЧА |
Это - нарушение протокола, если первый байт записи не является одними из определенных кодов операций. Следующие разделы описывают формат записей для каждого кода операции.
размер (байты) |
имя |
описание |
---|---|---|
1 |
код операции |
(ОТКРЫТЫЙ) код операции |
2 |
ID |
идентификатор соединения |
Конечная точка отправляет Операцию открытия, чтобы открыть обозначенное соединение. Это - нарушение протокола, если ID обращается к соединению, которое является в настоящий момент открытым или завершением на ожидании относительно передающей конечной точки. После того, как соединение открывается, оба ввода и состояния количества запроса для соединения являются нулем для обеих конечных точек.
Получение Операции открытия указывает, что другая конечная точка открывает обозначенное соединение. После того, как соединение открывается, оба состояния количества запроса ввода и вывода для соединения являются нулем для обеих конечных точек.
Чтобы предотвратить коллизии идентификатора между этими двумя конечными точками, пространство допустимых идентификаторов соединения разделяется пополам, в зависимости от значения старшего значащего бита. Каждой конечной точке только позволяют открыть соединения с определенным значением для высокого бита. Конечная точка, которая инициировала конкретное соединение, должна только открыть соединения с высоким набором битов в идентификаторе, и другая конечная точка должна только открыть соединения с нулем в высоком бите. Например, если апплет RMI, который не может создать сокет сервера, инициирует мультиплексированное соединение со своим узлом кодовой базы, апплет может открыть виртуальные соединения в диапазоне идентификатора 0x8000-7FFF, и сервер может открыть виртуальное соединение в 0-0x7FFF диапазоне идентификатора.
размер (байты) |
имя |
описание |
---|---|---|
1 |
код операции |
(ОТКРЫТЫЙ) код операции |
2 |
ID |
идентификатор соединения |
Конечная точка отправляет Операцию закрытия, чтобы закрыть обозначенное соединение. Это - нарушение протокола, если ID обращается к соединению, которое в настоящий момент закрывается или завершение на ожидании относительно передающей конечной точки (это может находиться на рассмотрении близко относительно конечной точки получения, если это также отправило Операцию закрытия за этим соединением). После отправки ЗАВЕРШЕНИЯ соединение становится на ожидании близкий для передающей конечной точки. Таким образом это, возможно, не вновь открывает соединение, пока это не получило ЗАВЕРШЕНИЕ или CLOSEACK для этого от другой конечной точки.
Получение Операции закрытия указывает, что другая конечная точка закрыла обозначенное соединение, и это таким образом становится закрытым на конечной точке получения. Хотя конечная точка получения, возможно, больше не отправляет операции за этим соединением (пока это не открывается снова), это все еще должно обеспечить данные во входных буферах реализации читателям соединения. Если соединение ранее было открыто вместо ожидания близко, конечная точка получения должна ответить работой CLOSEACK для соединения.
размер (байты) |
имя |
описание |
---|---|---|
1 |
код операции |
(ОТКРЫТЫЙ) код операции |
2 |
ID |
идентификатор соединения |
Конечная точка отправляет работу CLOSEACK, чтобы подтвердить Операцию закрытия от конечной точки получения. Это - нарушение протокола, если ID обращается к соединению, которое не находится на рассмотрении близко для конечной точки получения, когда работа получается.
Получение работы CLOSEACK изменяет состояние обозначенного соединения от ожидания близко к закрытому, и таким образом соединение может быть вновь открыто в будущем.
размер (байты) |
имя |
описание |
---|---|---|
1 |
код операции |
(ОТКРЫТЫЙ) код операции |
2 |
ID |
идентификатор соединения |
4 |
количество |
число дополнительных байтов требуют |
Конечная точка отправляет работу ЗАПРОСА, чтобы увеличиться, ее входной запрос значат обозначенное соединение. Это - нарушение протокола, если ID не обращается к соединению, которое открыто относительно передающей конечной точки. Входное количество запроса конечной точки постепенно увеличивается количеством значения. Значение количества является подписанным целым числом на 32 бита, и это - нарушение протокола, если это отрицательно или нуль.
Получение работы ЗАПРОСА заставляет выходной счет запроса для обозначенного соединения увеличиваться количеством. Если соединение находится на рассмотрении рядом с конечной точкой получения, то любые операции ЗАПРОСА могут быть проигнорированы.
размер (байты) |
имя |
описание |
---|---|---|
1 |
код операции |
(ОТКРЫТЫЙ) код операции |
2 |
ID |
идентификатор соединения |
4 |
количество |
число байтов в передаче |
количество |
данные |
данные передачи |
Конечная точка отправляет работу ПЕРЕДАЧИ, чтобы фактически передать данные по обозначенному соединению. Это - нарушение протокола, если ID не обращается к соединению, которое открыто относительно передающей конечной точки. Выходное количество запроса конечной точки постепенно уменьшается количеством значения. Значение количества является подписанным целым числом на 32 бита, и это - нарушение протокола, если это отрицательно или нуль. Это - также нарушение протокола, если работа ПЕРЕДАЧИ заставила бы выходное количество запроса передающей конечной точки становиться отрицательным.
Получение работы ПЕРЕДАЧИ заставляет байты количества данных быть добавленными к очереди байтов, доступных для чтения из соединения. Входное количество запроса конечной точки получения постепенно уменьшается количеством. Если это заставляет входное количество запроса становиться нулем, и пользователь соединения пытается считать больше данных, конечная точка должна ответить другой работой ЗАПРОСА. Если соединение находится на рассмотрении рядом с конечной точкой получения, то любые операции ПЕРЕДАЧИ могут быть проигнорированы.