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 吗?
非常感谢!
通过开放网络发送的任何内容都会遇到不规则的延迟,具体取决于网络的繁忙程度以及干扰程度。这是您需要处理的事情。
通常有两种方法可以用来处理这个问题,请选择最适合您的应用程序的方法:
- 在消息中放置一个时间戳,让接收方直接处理它们,但使用时间戳来了解每条消息应该在何时被使用,从而调整您的逻辑。
- 在接收端引入固定延迟,大致等于最长预期延迟。然后将收到的消息排队,并以正常速率将它们转发给应用程序的其余部分。
无论哪种情况,您都需要为丢失的消息做好准备。
我有一个游戏使用 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 吗?
非常感谢!
通过开放网络发送的任何内容都会遇到不规则的延迟,具体取决于网络的繁忙程度以及干扰程度。这是您需要处理的事情。
通常有两种方法可以用来处理这个问题,请选择最适合您的应用程序的方法:
- 在消息中放置一个时间戳,让接收方直接处理它们,但使用时间戳来了解每条消息应该在何时被使用,从而调整您的逻辑。
- 在接收端引入固定延迟,大致等于最长预期延迟。然后将收到的消息排队,并以正常速率将它们转发给应用程序的其余部分。
无论哪种情况,您都需要为丢失的消息做好准备。