Iphone GameKit多线程发送是否可行?

Iphone GameKit多线程发送是否可行?,iphone,ios,grand-central-dispatch,gamekit,gksession,Iphone,Ios,Grand Central Dispatch,Gamekit,Gksession,我正在开发一个可以向用户发送文件和操作的应用程序。用户可以随时从服务器(客户机-服务器模式)请求文件。 有时文件可能相当大(例如10 mb),在发送时可能会延迟将其他小操作发送给连接的用户。 似乎Gamekit有一个线程用于发送,另一个线程用于接收 我想知道是否有可能有一个额外的发送线程,以确保较小的行动包不必等待一个大文件被发送。我曾尝试使用grand central dispatch创建队列,但不幸的是,发送仍然似乎只使用一个线程 dispatch_async(pdfSendQ, ^{

我正在开发一个可以向用户发送文件和操作的应用程序。用户可以随时从服务器(客户机-服务器模式)请求文件。 有时文件可能相当大(例如10 mb),在发送时可能会延迟将其他小操作发送给连接的用户。 似乎Gamekit有一个线程用于发送,另一个线程用于接收

我想知道是否有可能有一个额外的发送线程,以确保较小的行动包不必等待一个大文件被发送。我曾尝试使用grand central dispatch创建队列,但不幸的是,发送仍然似乎只使用一个线程

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];

});

我想可以让单独的小动作包“中断”大文件的发送,但是这相当复杂,我想知道是否有更简单的方法

老实说,我没有使用GameKit的经验,但最终它一定是一个流套接字,对吗?
与其尝试用10mb的文件发送一个巨大的数据包,为什么不以较小的100kb数据块发送呢。这样,您就不必中断中间块,只需等待它完成并将您提到的不同类型的数据包(较小的动作数据包)排队即可。另一方面,这只是一个将大文件的各个部分附加在一起的问题,但是如果您得到其他东西,您将能够处理它。通过这种方式,您可以使它更具响应性,GKSession在自己的线程上完成所有实际的网络连接。有关更多详细信息,请查看lldb/Xcode。如果要发送10MB的数据块,只需发送数据即可。GKSession将为您排队写入,并尽可能在后台线程上发送。换句话说,不必担心主线程被饿死,只需写入数据。

我目前确实将文件拆分为数据包。然后以循环的形式发送(我假设它会将它们全部添加到队列中)。我想我需要的是能够将动作数据包添加到队列的前面,但不确定这是否可行。不要这样做(扰乱队列顺序会很糟糕),而是将第一个数据包排队,并在完成后为自己设置某种回调。发送完成后,请将以下文件排队。