Поскольку клиент и сервер являются приложениями OS X и могут быть написаны на Objective-C с использованием сред Cocoa, я настоятельно рекомендую вам взглянуть на технологию Distributed Objects (DO) в какао. Я не буду пытаться дать здесь руководство по распределенным объектам, просто объясню, почему это может быть полезно ...
DO обрабатывает асинхронную информацию о сети для вас (все обновления вашего клиента могут происходить в одном потоке). Кроме того, семантика связи с удаленным объектом (клиент-сервер или наоборот; DO становится двунаправленной после установления соединения) очень похожа на внутрипроцессное взаимодействие. Другими словами, если у вас есть ссылка на удаленный объект (на самом деле NSDistantObject
, который действует как прокси для объекта на другом конце соединения), ваш клиентский код может отправлять сообщения на удаленный объект, как если бы он был местный:
[remoteServer update:client];
от клиента или
[[remoteClientList objectAtIndex:i] update:server];
с сервера. Я оставлю детали настройки соединения и получения ссылки на remoteServer или remoteClient после прочтения руководства по программированию Распределенные объекты .
Недостатком использования DO является то, что вы привязаны к Какао; очень будет сложно написать клиент или сервер не-Какао, который общается с использованием Distirbuted Objects. Если есть вероятность, что вы захотите использовать не-Какао клиентские или серверные реализации, вы не должны использовать DO. В этом случае я бы порекомендовал что-то простое с большой кросс-платформенной и языковой поддержкой. API-интерфейс в стиле REST через HTTP - хороший вариант. Ознакомьтесь с документацией Cocoa URL Loading System для получения информации о том, как реализовать HTTP-запросы и ответы. Посмотрите пример кода Apple CocoaHTTPServer или проект code.google.com с тем же именем для получения информации о реализации HTTP-сервера в вашем коде Какао.
В качестве последнего варианта вы можете взглянуть на Руководство по программированию потокового вещания Cocoa , если хотите реализовать собственный сетевой протокол. Подклассы NSStream
позволят вам прослушивать сетевой сокет и обрабатывать асинхронные операции чтения / записи в / из этого сокета. Многие люди используют AsyncSocket для этой цели. Он оборачивает (низкоуровневые) CFStream и CFSocket и делает написание сетевого кода несколько проще.