Порты и серверы имен

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

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. Клиенты просто должны знать имя узла, выполняющего сервер имен порта (и имя порта).