2012-01-08 4 views
0

클라이언트/서버 게임 아키텍처를 구축하려고하고 있으며 로컬 Mac을 서버로 사용하여 게임을 테스트하고 싶습니다. Bonjour에서 여러 기사를 찾았지만 로컬 네트워크 트래픽에만 해당됩니다. 내 목표는 인터넷을 통해이 응용 프로그램을 작동시키고, 정적 주소로 호스트 된 응용 프로그램에 연결하여 데이터 회전을 용이하게하는 것입니다. 그러나, 나는이 목적을 위해 어떤 코코아 API를 사용해야 할지를 놓치고있다. 내가 NSConnection, NSStream subclasses 또는 좋은 'ol C sockets과 그 외의 것을 사용해야합니까? 게임 상태는 Objective-C로 이미 구축되어 있으며 서버 기능을 준비하고 나면 동작 준비가됩니다. 어떤 통찰력?Mac 서버가있는 iOS 클라이언트 응용 프로그램

+0

당신은 또한에 관심이있을 수 있습니다 https://bitbucket.org/snej/mynetwork/wiki/Home – sbooth

답변

1

소켓을 사용하는 것이 좋습니다. 사용하기 어렵지 않고 표준 방법이기 때문입니다. 심지어 BSD 소켓을 중심으로 비동기 래퍼 클래스를 작성했습니다 : https://github.com/H2CO3/TCPHelper

이것은 단순한 일대일 TCP 프로토콜 연결이며 IPv4와 IPv6을 모두 지원합니다. 원시 NSData를 보내고받을 수 있으며 그 주위에 프로토콜을 만들 수 있습니다.

NSURLConnection과 같은 Foundation 클래스는 이러한 목적으로 특별히 사용되지 않습니다. 표준 HTTP 서버와 상호 작용하기보다는 오히려 게임용 전체 HTTP 서버를 구현하고 싶지는 않습니다.

NSNetServices는 CFNetwork와 마찬가지로 사용자에게 적합하지만 후자는 사용하기가 조금 더 어렵습니다. Foundation 클래스를 사용하려면 NSNetServices를 권하고 싶습니다.

희망이 있습니다.

3

NSConnection, NSStrean 및 C 소켓은 서로 다른 필요에 따라 빌드됩니다. 더 많은 도움을 얻으려면 게임의 요구 사항과 서비스 종류를 지정해야합니다. 로컬 네트워크가 아닌 인터넷에 의존하는 클라이언트 - 서버 응용 프로그램을 개발하려는 경우 Bonjour는 도움을 줄 수 없습니다.

C 소켓이 있으며, 이들을 감싸는 Cocoa API는 클라이언트와 서버 사이의 열린 네트워크 스트림에서 작동합니다. 공개 스트림을 사용하면 클라이언트가 요청하지 않아도 서버가 클라이언트에 데이터를 보낼 수 있다는 이점이 있습니다. Cocoa의 NSURLConnection은 다르게 작동합니다. 이를 통해 HTTP 요청을 수행하고 서버에서 형식화 된 응답을 수신 할 수 있습니다.

응용 프로그램이 HTTP 요청을 기반으로하는 경우 NSURLConnection 또는 AFNetworking을 타사 대안으로 사용하는 것이 좋습니다. 응용 프로그램이 공개 스트림에 의존하는 경우, Apple의 CFNetwork (뛰어난 성능, 안정성 및 다양성을 갖춘 Mac이 Carbon을 사용했던 날로부터 유래 된 BSD 소켓에 대한 C 래퍼) 및 GCDAsyncSocket, BSD 소켓, Crand Central Dispatch 지원, Objective-C 준비 완료. 훌륭하게 작동합니다.

도와줬으면합니다.

1

다양한 방법으로이를 수행 할 수 있습니다. 데이터를 전달하는 방법과 데이터가 사용될 용도에 따라 달라집니다.

먼저 게임과 함께 개발 목적으로 사용할 수있는 호스트 이름을 설정합니다. http://dyn.com/dns/과 같은 것을 사용하여 Mac 용으로 설정할 수 있습니다. 그런 다음 컴파일러 설정을 사용하여 개발/프로덕션 URL을 전환 할 수 있습니다.

다음은 게임용으로 TCP 소켓을 사용하는 것이 좋습니다 (CocoaAsyncSocket - https://github.com/robbiehanson/CocoaAsyncSocket 사용). 이 방법을 사용하면 유스 케이스가 잘 작동합니다.턴 기반 데이터를 다루고 있기 때문에 (그리고 모든 데이터가 중요하기 때문에) UDP 소켓을 사용하는 것을 권장하지 않습니다 (그러나 드롭 된 패킷이 중요하지 않은 위치, 비디오 또는 오디오 데이터 만 전달하는 경우에는 작동합니다) .

관련 문제