2012-08-23 1 views
12

저는 GameKit.framework과 협력 중이며 두 iPhone 간의 통신을 만들려고합니다.GameKit의 통신은 GKMatchSendDataReliable과 신뢰할 만합니까?

GKMatchSendDataReliable 모드로 패키지를 보내고 있습니다.

문서는 말한다 :이 성공적으로받는 사람 또는 연결 시간이 수신 될 때까지

GKMatchSendDataReliable

데이터는 지속적으로 전송됩니다. 신뢰할 수있는 전송은 전송 된 순서대로 전달됩니다. 배달을 보장해야 할 때 사용하십시오.

iOS 4.1 이상에서 사용할 수 있습니다. GKMatch.h에 선언되어 있습니다.

잘못된 WiFi 연결에서 몇 가지 문제가 발생했습니다. GameKit은 연결이 끊어짐을 선언하지 않지만 일부 패키지는 절대로 도착하지 않습니다.

GKMatchSendDataReliable을 사용할 때 100 % 신뢰할 수있는 통신을 믿을 수 있습니까? 아니면 애플이 구현하지 않은 것에 멋진 이름 만 사용하고 있습니까?

+0

안정적인 모드를 사용한 적이 없지만 시뮬레이터에서 GC 앱을 테스트 할 때 많은 문제가 발생했습니다. 두 기기에서 앱을 테스트해야합니다. – Adam

답변

1

내 사용자는 게임 중에 실수로 일부 데이터가 손실 될 수도 있다고 불평합니다. 나는 test app이라고 썼고 GKMatchSendDataReliable은 정말로 신뢰할 만하지 않다는 것을 알아 냈습니다. 인터넷 연결이 약한 경우 (예 : EDGE) 게임 센터 API에서 오류가 발생하지 않고 일부 패킷이 정기적으로 손실됩니다.

신뢰할 수있는 전송을 위해 추가 전송 레이어를 추가하는 것이 유일한 옵션입니다.

이 목적을 위해 간단한 lib를 작성했습니다 : RoUTP. 각 수신 메시지에 대한 확인 응답이 수신 될 때까지 모든 전송 된 메시지를 저장하고 끊어진 시퀀스가 ​​발생할 경우 수신 된 메시지를 버퍼에 다시 보냅니다. 내 테스트 조합에서 "RoUTP + GKMatchSendDataUnreliable"은 "RoUTP + GKMatchSendDataReliable"보다 더 효과적입니다. 물론 순수 GKMatchSendDataReliable보다 신뢰성이 좋습니다.

+1

나는 당신과 동의하는 증거를 수집했습니다. 나는이 점에 놀랐다는 것을 인정해야한다. 애플에서는 실망스럽지 않다. 진지하게 말하면, 그들의 믿을만한 연결은 뻔뻔스럽게 신뢰할 수없는 것입니까? 여러 전송 레이어 위에있는 게임 레이어 위에 전송 레이어를 추가해야합니까? 다음으로, 우리는 응용 프로그램에서 하드웨어 흐름 제어를 작성하기 시작할까요? FFS. – theLastNightTrain

0

거의 100 % 신뢰할 수 있지만 때로는 필요하지 않은 것일 수 있습니다 ... 예를 들어 네트워크에서 탈퇴 한 경우 GKMatchSendDataReliable을 통해 보내는 모든 항목이 전송 된 순서대로 전송됩니다. 예를 들어 턴 기반 게임의 경우에는 탁월합니다. 그러나 빠른 반응이 필요한 경우 네트워크가 중단되면 누락 된 패키지를 잊지 않을 것입니다.

GKMatchSendDataReliable이 데이터를 보내지 않는 경우 연결 시간이 초과되었습니다. 앱을 닫을 때도 마찬가지라고 생각합니다.

관련 문제