2009-08-31 4 views
2

GameKit으로 놀았으므로 지금은 정말 어려운 문제에 직면하고 있습니다.iPhone SDK : GameKit 및 대용량 파일 + 연결이 끊어졌습니다.

저는 블루투스의 더 큰 파일 (1-2MB)을 보낼 것입니다. 나는 이미 패킷 (약 8kB)을 준비했다.

iPhone - sending header: file divided into 25 parts 
iPod - received header: OK I got it waiting for 25 parts 
iPhone - sending part #1 
iPod - received part #1 send next 
iPhone - sending part #2 
iPod - received part #2 send next 
... 
iPhone - sending part #24 
iPod - received part #24 send next 
iPhone - sending part #25 
iPod receiving part #25 processing file 

내가 사용하여 파일 부품 및 메시지 (배달 확인)을 모두 보내 : 다음 방식에 설명 된대로

내 응용 프로그램은 작동

[mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil]; 

및 수신 데이터 :

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context 

블루투스 전송 중 발생할 수있는 몇 가지 문제를 어떻게 처리하는지 알고 싶습니다. 엔. GKSessionDelegate는 데이터가 전달되었는지 여부에 관계없이 정보를 제공하지 않습니다.

90 %의 경우 전송이 정상적으로 작동하지만 갑자기 중지되어 앱을 다시 연결하거나 다시 시작하지 않고 계속 진행되지 않는 경우가 있습니다. 보낸 사람이 파일 일부의 성공적인 배달의 확인을받은 경우

-(void)sendAgain { 
    [self sendData:bufor]; 
} 
-(void)sendData:(NSData *)data { 
    bufor = [data retain]; 

    timeoutTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(sendAgain) userInfo:nil repeats:NO]; 

    [mSession sendData:data toPeers:mPeers withDataMode:GKSendDataReliable error:nil]; 
} 

timeOutTimer가 무효화 :

는 내가 1 초 내에 응답을하지 않을 경우 데이터를 다시 설정하기 쉬운 솔루션을 발명했습니다. 그러나 실제로이 솔루션을 구현할 때 더 많은 문제점이 있습니다.

장치가 책상 옆에 ​​서로 있습니다.

기기간에 '배달되지 않은'데이터 문제는 어떻게 처리합니까? 그것은 단지 도구 일 뿐이지 만 게임을 개발하는 과정에서 어떻게 짜증이 났을까요?

덧붙여 말하면, 짧은 채팅 메시지를 보내면 아무런 문제가 발생하지 않으며 동일한 방법을 사용하고 있습니다.

실제로 연결이 끊어지는 경우는 거의 없으며 단지 데이터가 무선으로 손실되는 것을 좋아합니다. 저는 이미 데이터의 크기가 약 8kb가되도록 부품을 나누었습니다. 실제로 이미지 전송이 실제로 느리게 이루어집니다.

+0

나는 문서가 1000 바이트 한계를 제안하고 또 다른 지점에서 95k를 언급하지만 이것이 하드 한계 또는 무엇인지 명확하지 않다는 것을 알았습니다. –

답변

2

GameKit 프레임 워크는 현재 작업중인 게임의 데이터를 간단하게 교환하는 경우에도 매우 안정적이지 않습니다. 큰 데이터를 전송하는 데 사용하지 않을 것입니다. 단지 두통을 요구하는 것입니다.

1

"it"과 "refulgentis"에 동의합니다. GK를 통해이를 수행하는 것은 신뢰할 수없는 실행을 요구합니다. Bonjour 및 wiFi를 통해 설정하거나 각 사용자가 일부 중앙 오프라인 소스에서 콘텐츠를 다운로드하는 것이 좋습니다. 큰 파일을 한 장치에서 다른 장치로 옮길 것을 설계에서 요구하는 경우 큰 파일을 장치 대 장치로 전송하는 대신 한쪽에서 다른 장치로 파일을 업로드 할 수 있습니다.

+0

이 사용자의 접근 방식에 동의합니다. RESTful 인터페이스 (Rails, ftw)로 기본 웹 애플리케이션을 생성하여 장치 간의 모든 온라인 데이터 트랜잭션을 처리 할 수 ​​있습니다. 이 시점에서, 당신이해야 할 일은 (HTTP 요청을 통해) 정보를 얻기 위해 웹 서비스를 목표로 삼는 것입니다. 파일 크기 요구에 따라 두 가지 (웹 및 게임 키트)를 계속 사용할 수도 있습니다.이미지는 webservice를 통해 수행 할 수 있으며 텍스트는 gamekit을 통해 수행 할 수 있습니다. 그렇게하면 각 방법을 효율적으로 사용하고 병목 현상의 주요 문제를 피할 수 있습니다. – user298261

관련 문제