ファイルとアクションをユーザーに送信できるアプリケーションに取り組んでいます。ユーザーはいつでもサーバーからファイルを要求できます (クライアント サーバー モデル)。場合によっては、ファイルがかなり大きく (10 MB など)、送信中に他の小さなアクションが接続ユーザーに送信されるのが遅れる場合があります。Gamekit には、送信用のスレッドと受信用の別のスレッドがあるようです。
小さなアクションパケットが大きなファイルが送信されるのを待つ必要がないようにするために、追加の送信スレッドを持つことが可能かどうか疑問に思っています。グランドセントラルディスパッチでキューを作成しようとしましたが、残念ながら、送信はまだ1つのスレッドしか使用していないようです.
dispatch_async(pdfSendQ, ^{
NSString *filePath = [_document.fileURL path] ;
if (!_pdfNSData)
_pdfNSData = [NSData dataWithContentsOfFile:filePath];
for(NSData* packet in self.packets) {
NSError* error = nil;
[_session sendData:packet toPeers:[NSArray arrayWithObject:peerID] withDataMode:GKSendDataReliable error:&error];
if(error != nil) {
[[NSNotificationCenter defaultCenter] postNotificationName:kPacketFailedNotification object:self userInfo:[NSDictionary dictionaryWithObject:error forKey:@"error"]];
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:kPacketSentNotification object:self];
}
}
[[NSNotificationCenter defaultCenter] postNotificationName:kFileSentNotification object:self];
});
大きなファイルの送信を「中断」するために個別の小さなアクション パケットを取得することは可能だと思いますが、これはかなり複雑であり、もっと簡単な方法があるかどうか疑問に思っていました。