IOS / MultipeerConnectivity / SendData 和 ReceiveData 之间的延迟

IOS / MultipeerConnectivity / Delay between SendData and ReceiveData

我有一个游戏使用 Multipeer senddata 每 0.05 秒在一个可变数组中发送玩家 position.x、position.y 和角度。

NSMutableArray *Messagee = [[NSMutableArray alloc] initWithCapacity:10];
[Messagee addObject:x];
[Messagee addObject:y];
[Messagee addObject:ang];


NSData* Message = [NSKeyedArchiver archivedDataWithRootObject:Messagee];
dispatch_async(dispatch_get_main_queue(), ^(void) {  
[self.partyTime sendData:Message
                withMode:MCSessionSendDataUnreliable
                   error:nil];      
});

其他玩家使用

获取数据
- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID;

我面临的问题是 didrecievedata 的调用非常不规律,因为它应该每 0.05 秒调用一次(我每 0.05 秒发送一次数据)。

我发现两个接收数据之间的延迟差异巨大,最高可达 0.20 秒,然后是下一个数据包的 0.00001 秒。

我需要一个 0.05 秒的常量 didrecievedata 等于来自其他玩家的发送数据来同步玩家位置。

有什么方法可以让发送数据和接收数据之间的延迟很小吗?例如等于 Ping?

我发送的数据(NSMutablearray)是大的->延迟

我应该使用 Streams 吗?

非常感谢!

通过开放网络发送的任何内容都会遇到不规则的延迟,具体取决于网络的繁忙程度以及干扰程度。这是您需要处理的事情。

通常有两种方法可以用来处理这个问题,请选择最适合您的应用程序的方法:

  1. 在消息中放置一个时间戳,让接收方直接处理它们,但使用时间戳来了解每条消息应该在何时被使用,从而调整您的逻辑。
  2. 在接收端引入固定延迟,大致等于最长预期延迟。然后将收到的消息排队,并以正常速率将它们转发给应用程序的其余部分。

无论哪种情况,您都需要为丢失的消息做好准备。