我正在研究可以向用戶發送文件和操作的應用程序。用戶可以隨時從服務器(客戶端服務器型號)請求文件。 有時文件可能相當大(例如10 MB),同時發送可以將其他小動作延遲發送給連接的用戶。 似乎Gamekit有一個發送線程和一個單獨的接收線程。GameKit多線程發送可能嗎?
我想知道是否有可能有一個額外的發送線程,以確保較小的動作數據包不必等待大型文件發送。我試圖創建一個大型中央調度隊列,但不幸的是,發送仍然只使用一個線程。
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];
});
我想這將有可能得到單獨的小行動包「中斷」大文件發送,但是這將是相當複雜的,我想知道如果有一個更簡單的方法。
我目前正在將文件拆分成數據包。這些然後發送在一個循環(我假設它添加了他們所有的隊列)。我想我需要的是能夠將行動數據包添加到隊列的前端,但不確定是否可行。 – bencallis
不要這麼做(對隊列順序來說不好),而是隻需排隊第一個數據包,並在完成時設置某種回調。完成發送後排隊等待下一個。 –