Порты и серверы имен
Порты являются низкоуровневыми каналами передачи, передающими и получающими необработанные данные между потоками и процессами. Порты могут быть присвоены имена и распространены к другим процессам через серверы имен порта. Каждый тип порта имеет свой собственный сервер имен порта.
NSPorts и подклассы
NSPort
объект представляет канал передачи или от другого NSPort
объект, обычно находящийся в различном потоке или задаче. Распределенное системное использование объектов NSPort
объекты отправить NSPortMessage
объекты назад и вперед. Необходимо реализовать межсвязь приложений с помощью распределенных объектов, когда это возможно, и использования NSPort
объекты непосредственно только при необходимости.
Получить входящие сообщения, NSPort
объекты должны быть добавлены к NSRunLoop как входной источник. Объекты NSConnection автоматически добавляют их получать порт, когда инициализировано. Посмотрите Циклы Выполнения для получения дополнительной информации.
Подклассы NSPort
представляйте определенные разновидности транспорта данных от одного процесса до другого. Доступные подклассы NSMachPort
, NSMessagePort
, и NSSocketPort
и каждый описан ниже.
Обратите внимание на то, что экземпляры подклассов порта не могут быть смешаны на определенном канале передачи. Например, клиент не может соединиться с использованием сервера NSMessagePort
если сервер только поддерживает соединения, сделанные с NSSocketPort
. Кроме того, Вы не можете передать экземпляры NSMessagePort
в сообщении к другому процессу по использующему каналу NSSocketPort
объекты как его конечные точки; можно только передать NSSocketPort
объекты на таком канале. Эти ограничения применяются к любым подклассам NSPort
, не просто NSMessagePort
и NSSocketPort
. Однако Вы свободны создать другие соединения с сервером с помощью других подклассов NSPort
(принятие сервера поддерживает многократные транспорты), и отправьте экземпляры того другого подкласса на том канале.
NSMachPort
NSMachPort
объектная обертка для порта Маха, фундаментального коммуникационного порта в OS X. NSMachPort
допускает локальный (на той же машине) коммуникация только.
Использовать NSMachPort
эффективно необходимо быть знакомы с портами Маха, правами доступа порта и сообщениями Маха. Посмотрите Маха документация OS для получения дополнительной информации.
NSMessagePort
NSMessagePort
системно-независимая реализация NSPort
для отправки сообщений. NSMessagePort
допускает локальный (на той же машине) коммуникация только.
NSSocketPort
NSSocketPort
системно-независимая реализация NSPort
для отправки сообщений по BSD снабжают порт сокетом. NSSocketPort
допускает и местную и удаленную связь, но может быть более дорогим, чем другие порты для локального случая.
NSPortNameServer и подклассы
NSPortNameServer
обеспечивает объектно-ориентированный интерфейс для регистрационной службы порта, используемой распределенной системой объектов. NSConnection
объекты используют его, чтобы связаться друг с другом и распределить объекты по сети; необходимо редко должны быть взаимодействовать непосредственно с NSPortNameServer
объект.
Вы добираетесь NSPortNameServer
объект при помощи systemDefaultPortNameServer
метод класса — никогда не выделяет и инициализирует экземпляр непосредственно. С серверный объектом по умолчанию можно зарегистрироваться NSPort
объект под именем, делая его доступным в сети, и также не регистрирует его так, чтобы это не могло искаться (несмотря на то, что другие приложения, уже искавшие NSPort
объект может все еще использовать его, пока это не становится недопустимым).
Каждый тип NSPort
имеет его собственное NSPortNameServer
разделите на подклассы, как описано ниже.
NSMachBootstrapServer
Этот сервер имен порта берет и возвращает экземпляры NSMachPort.
Функциональность удаления порта не поддерживается в NSMachBootstrapServer
; если Вы хотите отменить службу, необходимо уничтожить порт (лишите законной силы NSMachPort
возразите данный registerPort:name:
).
NSMessagePortNameServer
Этот сервер имен порта берет и возвращает экземпляры NSMessagePort
.
Функциональность удаления порта не поддерживается в NSMessagePortNameServer
; если Вы хотите отменить службу, необходимо уничтожить порт (лишите законной силы NSMessagePort
возразите данный registerPort:name:
).
NSSocketPortNameServer
Этот сервер имен порта берет и возвращает экземпляры NSSocketPort
.
Функциональность удаления порта поддерживается removePortForName:
метод и должен использоваться для удаления недопустимых портов сокета.
В отличие от других серверов имен порта, NSSocketPortNameServer
может работать по сети. Путем регистрации портов сокета Вы делаете их доступными для других компьютеров в сети без жесткого кодирования номера порта TCP. Клиенты просто должны знать имя узла, выполняющего сервер имен порта (и имя порта).