2012-01-08 3 views
0

Я пытаюсь создать архитектуру игры клиент/сервер и хотел бы начать тестирование игры, используя мой локальный Mac в качестве сервера. Я нашел несколько статей о Bonjour, но это касается только сетевого трафика. Моя цель - заставить это приложение работать через Интернет, подключившись к размещенному приложению на статическом адресе, чтобы облегчить преобразование данных. Однако я не могу понять, какие API Cocoa использовать для этой цели. Должен ли я использовать NSConnection, NSStream subclasses, или хороший 'ol C sockets и еще много чего. Состояние игры уже построено в Objective-C и готово к запуску, когда у меня будет готово серверное оборудование. Любое понимание?Клиентское приложение iOS с сервером Mac

+0

Вы также можете быть заинтересованы в https://bitbucket.org/snej/mynetwork/wiki/Home – sbooth

ответ

1

Я предлагаю вам использовать сокеты, так как они не являются трудными в использовании и являются стандартным способом. Я даже написал асинхронный класс обертки вокруг сокетов BSD: https://github.com/H2CO3/TCPHelper

Это для простых соединений один-к-одному TCP-протоколу, поддерживающих как IPv4, так и IPv6. Вы можете отправлять и получать необработанные NSData и, возможно, создавать протокол вокруг него.

Классы классов, такие как NSURLConnection, не являются специально для этой цели; а не взаимодействовать со стандартными HTTP-серверами (я полагаю, вы не хотите реализовывать полный HTTP-сервер для игры).

NSNetServices может подойдет вам как CFNetwork, но последнее немного сложнее в использовании. Если вы хотите использовать классы Foundation, я бы рекомендовал NSNetServices.

Надеюсь, это поможет.

3

Соединители NSConnection, NSStrean и C предназначены для различных нужд. Вам нужно указать потребности вашей игры и вид обслуживания, чтобы получить дополнительную помощь. Если вы хотите разработать клиент-серверное приложение, основанное на Интернете, а не на локальной сети, Bonjour не сможет помочь.

C сокеты и API-интерфейсы Cocoa, которые обертываются вокруг них, предназначены для работы с открытым сетевым потоком между клиентом и сервером. Преимущество наличия открытого потока состоит в том, что вы можете отправить сервер на сервер клиентам без запроса клиента. NSURLConnection в какао работает по-разному. С его помощью вы можете выполнять HTTP-запросы и получать от сервера отформатированные ответы.

Если ваше приложение основано на HTTP-запросах, я рекомендую вам взглянуть на NSURLConnection или AFNetworking в качестве сторонней альтернативы. Если ваше приложение опирается на открытые потоки, я рекомендую вам взглянуть на CFNetwork от Apple (оболочка C вокруг сокетов BSD, которая исходит из тех дней, когда Mac имел Carbon с большой производительностью, стабильностью и универсальностью) и GCDAsyncSocket, сторонней библиотеки, обернутой вокруг BSD Sockets, поддерживает Crand Central Dispatch, является Objective-C готовым и прекрасно работает.

Надеюсь, я помог.

1

Существует много разных способов достижения этого. Это зависит от того, как вы будете передавать данные и для чего они будут использоваться.

Во-первых, я бы установил имя хоста, которое вы можете использовать для целей развития в своей игре. Вы можете использовать что-нибудь вроде http://dyn.com/dns/, чтобы настроить это для своего Mac. Затем вы можете включить параметр компилятора, чтобы отключить URL-адрес разработки/производства.

Далее я бы рекомендовал использовать сокеты TCP для вашей игры (используя CocoaAsyncSocket - https://github.com/robbiehanson/CocoaAsyncSocket). Этот метод должен отлично работать в вашем случае использования.Поскольку вы делаете пошаговые данные (и поскольку все эти данные имеют жизненно важное значение), я бы не рекомендовал использовать сокеты UDP (но они работали бы, если бы вы только передавали положение, видео или аудиоданные, где потерянный пакет мог не иметь значения) ,

Смежные вопросы