Adobe Cirrus 提供了许多用于点对点数据传输的选项:定向路由、对象复制和多播等等。
我只想将数据发送给一个特定的对等点,其他对等点在传输过程中“看到”它没问题。
我对定向路由(显而易见的答案)的实验进行得并不顺利。所有 sendto... 方法都失败,而 NetGroup.post 在同一个网络组上工作正常。由于可靠性问题,我担心使用直接连接。
有没有人成功地实现了一对一的消息传递策略(不是一对多),它仍然可以在非连接的对等点之间发送消息 - (定向路由)或成功地解决了这个问题?
我正在考虑各种解决方法,但我很困惑这些 NetGroup
方法:sendToNearest
、sendToNeighbour
和 sendToAllNeighbours
只是似乎失败了,没有明显的原因。
最佳答案
netGroup.sendToNearest
应该是最快的,但需要做更多的工作才能让它继续。要处理该消息,您需要监听 NetGroup.SendTo.Notify
事件。但是,您可能会收到消息,但不是它的最终目的地……换句话说,您可能只是 P2P 网络中的中间人,需要将消息转发到下一个最近的目的地节点。因此,在处理 NetGroup.SendTo.Notify
事件时,您需要首先检查您是否是最终目的地。您可以通过检查 event.info.fromLocal
来做到这一点。如果这是真的,那么你就是最终目的地,你应该为所欲为。如果它是假的,您必须积极转发消息。要转发消息,您需要知道最终目的地的 ID 是什么,因此您必须将其实际包含在原始消息中。您可以转发消息,例如...
if (!event.info.fromLocal)
netGroup.sendToNearest(event.info.message, event.info.message.destination)
据我了解,定向路由基本上应该与发布速度相同,但它不会在每个人实际上不需要时将不必要的数据发送给每个人,从而阻塞网络。此外,定向路由发生在 UDP 上,应该具有与发布相同的缺陷——不能保证交付。保证通过 RTMFP 交付的唯一方法是使用对象复制。
这里有一些关于定向路由的更多信息:http://www.flashrealtime.com/directed-routing-explained-flash-p2p/
关于flash - Adobe 卷云 : Quickest way to deliver a chunk of data to a single peer with known id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6380698/