Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 多EER连接框架:稳定性和建议_Ios_Multipeer Connectivity - Fatal编程技术网

Ios 多EER连接框架:稳定性和建议

Ios 多EER连接框架:稳定性和建议,ios,multipeer-connectivity,Ios,Multipeer Connectivity,我正在做一个使用MC框架作为沟通渠道的项目,经过一些测试,我感觉这个渠道在某种程度上是不稳定的 为了正确使用该框架,我一直在关注苹果的文档和视频,但碰巧: 配对后,同伴经常会断开连接,如果我配对多个同伴,断开连接的次数会更多 一些数据包包含混合数据 是否有任何与该框架合作的建议? i、 e: 具体项目设置?(即:能力部分中是否有需要启用的内容?) 多线程限制?(即:始终从同一线程调用mc方法) 发送数据量方面的限制 我找到了一个链接,其中提到了框架在压力下不能正常运行的一些内容。这就是我

我正在做一个使用MC框架作为沟通渠道的项目,经过一些测试,我感觉这个渠道在某种程度上是不稳定的

为了正确使用该框架,我一直在关注苹果的文档和视频,但碰巧:

  • 配对后,同伴经常会断开连接,如果我配对多个同伴,断开连接的次数会更多
  • 一些数据包包含混合数据
是否有任何与该框架合作的建议? i、 e:

  • 具体项目设置?(即:能力部分中是否有需要启用的内容?)
  • 多线程限制?(即:始终从同一线程调用mc方法)
  • 发送数据量方面的限制
我找到了一个链接,其中提到了框架在压力下不能正常运行的一些内容。这就是我想要的建议:)

记录在案:

  • 我正在使用基于post的实现,因为它不适合我
  • 我只使用一个
    MCSession
    用于我尝试配对的所有同龄人
  • 加密首选项设置为
    MCEncryptionNone
  • 使用
    sendData:
    sendResourceAtURL:
    与对等方通信

我在游戏中使用了MC框架,并为其明显的不稳定性找到了一些解决方法:

1) 我使用每15秒发送一次“保持活动”事务来维护链接上的活动。我发现这几乎解决了我所经历的所有连接丢失问题

2) 我将由数据接收触发的所有处理分派到主线程,并且从不在线程之间携带任何MCPeer或MCSession对象(初始连接协议除外)。我这样做也是为了尽量减少数据接收代码所花费的时间,以便MC使用的线程尽快恢复控制(我还发现这是一些断开连接的原因)。我不将此规则应用于发送数据(仅在接收时)


3) 我还没有找到一个干净的解决方案来解决在尝试建立连接时出现的重复对等点(使用标准UI和我自己的UI)。到目前为止,比较MCPeer ID以避免重复似乎只能消除部分重复。此外,似乎使用同一个MCSession进行广告(MCAdvertiserAssistant)和连接到对等方会导致一些冲突,因此每次启动助手时,我都会使用一个新的、单独的MCSession实例。

我在一个定期传输大量数据的应用程序中使用它。一些变通办法有助于:

  • 一旦建立了与对等方的连接,就设置一个用于通信的
    NSOutputStream
    /
    NSInputStream
    对。根本不要在multipeer连接框架中使用send data或send resource方法

  • 如果发生意外断开连接,则无法信任
    MCSession
    对象的状态-将其拆下,然后从头开始。更新:此处的意外断开是连接的另一端关闭了其中一个流

  • 提示用户检查所有设备是否位于同一WiFi接入点上。如果对等点位于同一网段,但使用不同的Wifi,浏览器将看到广告商并能够连接,但几秒钟后将断开连接

更新:

要建立输出流,请执行以下操作:

-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state
{
    switch(state)
    {
        // ...

        case MCSessionStateConnected:
            outputStream = [session startStreamWithName:@"Stream" toPeer:peerID error:&error];
            // Setup a stream handler for the stream and open it
            break;
        // ...
    }
}
要建立输入流,请使用以下方法实现此方法:
MCSessionDelegate

-(void)session:(MCSession *)session didReceiveStream:(NSInputStream *)stream withName:(NSString *)streamName fromPeer:(MCPeerID *)peerID
{
    // Setup a stream handler for the stream and open it
}
当连接的另一端打开其输出流时,将调用该函数


现在有两条流可用于双向通信。

考虑到空投的性能糟糕,我几乎无法让它工作,即使是在全新的MacBook Pro和iPhone 6S Plus上。。。我认为这只是废话,苹果应该感到羞耻。这就像当iCloud首次推出时,我们中任何一个试图使用该文档同步垃圾的人,都像是先跳进一个木削片机的腿。我在某个地方读到,当浏览/广告同行不同时在同一台设备上完成时,它会增加稳定性。在我的应用程序中,只有我的主设备浏览对等设备,我的从属设备发布广告,这似乎减少了一点连接延迟,减少了断开连接。希望这能有所帮助。“只需使用PubNub”:/我曾经参加过苹果公司主持的一次特别iOS会议,并有机会与他们的一位工程师谈论空投。因为它不“只是工作”,我开玩笑地对他说:“告诉我真相:你们不是自己开发空投的,你们一定是从微软那里获得的!”。他尴尬地否认了。@CommaToast空投速度非常慢-我认为他们正在解决过多数据通过节流扼杀连接的问题。感谢您的时间,几点:•关于如何正确使用MC的
NSStream
的任何链接?我目前有一个实现,但不确定它是否正确“发生意外错误”是什么意思?如何识别会话损坏的场景?嘿,谢谢。关于线程,没错,文档中有一个提示。大约2点和3点,我会试试看它是否能提高稳定性。干杯