gpt4 book ai didi

actionscript-3 - 仅使用 RTMFP 进行随机匹配 (Adobe Cirrus)

转载 作者:行者123 更新时间:2023-12-04 08:53:03 27 4
gpt4 key购买 nike

我试图想出在一个简单的游戏中进行一些随机匹配的最佳方法。

在使用 Adob​​e Cirrus 试验 netStreams 时,我可以使用 Cirrus 轻松设置直接连接、发送数据、文本、视频和声音,这非常棒。我发现建立一个简单的 P2P 连接非常容易,而且它就像我需要的那样工作。

但我真的想实现一个随机配对功能只使用卷云所以一切都是 p2p ......

我将如何在同一个组中随机获取一个同伴......这已经与其他人没有直接联系?

一些想法:

- 我在想也许我可以使用对象复制……当有人连接到 GroupSpecifier 时,我可以将另一个对象推送到这个具有本地 peerID 及其状态的共享数组中。然后我可以在游戏中更改数组。但是我担心如果这个人只是关闭网络窗口,则无法保证他们的条目会被删除。

-我还想过只对包含nearID的组进行“发布”,其他同行可以获得该帖子......而那些不在游戏中的人将尝试直接连接回来。然后那一侧将连接到它们。那么他们就会彼此直接联系。但后来我觉得,如果可能有 100 人“可用”……收到帖子……然后他们都尝试与一个人建立联系,那么这可能会导致问题。

-另外,我想只做 sendToNearest ......但这不是匹配人的最佳方式......因为我认为你只能有这么多邻居......如果组中有 1000 人。你只能连接到几个实际上被认为是你邻居的对等点,对吗?然后基本上你可能最终只与相同的 5-10 人匹配,或者在技术上被认为是邻居。

最佳答案

我认为在匹配节点时没有任何方法可以避免超时和重试,因为 1) 存在未知且可变的网络延迟,以及 2) 连接可能在未知时间加入和离开。

因此,任何尝试连接到另一个节点的节点都必须保留以下有状态参数:

  • 我匹配到另一个节点
  • 我有一个未完成的匹配请求
  • 我未完成的匹配请求是节点 X

  • 如果前两个中的任何一个为真,它必须拒绝传入的匹配请求(除非传入的请求来自节点 X,并且我对同一节点有未完成的请求)。如果两者都为假,它可能只请求匹配。

    此外,一旦匹配,他们可能需要轮询他们的伙伴或观察断开连接的消息并做出适当的响应(返回匹配阶段或退出,无论应用程序需要什么)。

    在这种情况下,您至少可以通过创建排序算法来减少同步节点所需的网络流量,以便所有节点提前知道他们的最佳匹配是谁,并尝试直接连接到他们的最佳匹配最小的网络流量(没有广播帖子消息,不是随机尝试)。

    其中的关键是 peerID,NetGroup 中的每个节点都会自动获取它。当节点收到 NeighborConnect 消息时,它还包含邻居节点的唯一 peerID。换句话说,每个节点都有一个唯一的名称(这恰好是一个很大的随机数)并且知道所有其他节点的唯一名称。

    这个 peerID 很长,有点像 256 位。您可以用它创建一个排序顺序——也许是这样的:将前 32 位视为一个整数,将远程节点 peerID 与您自己的 peerID 异或,然后从低到高对远程节点进行排序。

    因此,现在每个节点对他们将要连接到谁的想法大致相同(即使会有差异,例如,基于通过组传播的断开/连接消息)。节点将遍历排序列表以尝试连接到它们的最佳匹配项,可能在失败的连接尝试之间有一些随机超时。

    这可能不是理想的解决方案 - 可能存在更好的解决方案,但我想这比随机尝试节点或使用广播消息要好。

    关于actionscript-3 - 仅使用 RTMFP 进行随机匹配 (Adobe Cirrus),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9624098/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com