Adobe Cirrus提供了许多从对等方传输数据的选项:定向路由,对象复制和多播等等。
我只想将数据发送给一个特定的同行,对于其他同行来说,可以在运输过程中“看到”它。
我的定向路由实验(明显的答案)并不顺利。所有的sendto ...方法都失败了,而NetGroup.post在同一个网络组上工作正常。由于可靠性,我担心使用直接连接。
是否有人成功实施了一对一的消息传递策略(不是一对多),仍然可以在非连接对等体之间进行消息 - (定向路由)或成功解决了这个问题?
我正在考虑各种解决方法,但我对这些NetGroup
方法感到非常困惑:sendToNearest
,sendToNeighbour
& sendToAllNeighbours
似乎失败了,没有明显的理由。
答案 0 :(得分:2)
netGroup.sendToNearest
应该是最快的,但需要更多的工作才能实现。要处理消息,您需要侦听NetGroup.SendTo.Notify
事件。但是,你可能会收到消息,但不是它的最终目的地...换句话说,你可能只是P2P网络中的中间人,需要将消息转发到下一个最近的节点。因此,在处理NetGroup.SendTo.Notify
事件时,您需要首先检查您是否是最终目的地。您可以通过选中event.info.fromLocal
来执行此操作。如果这是真的,那么你就是最终目的地,你应该随心所欲。如果它是错误的,那么必须在转发邮件时发挥积极作用。要转发消息,您需要知道最终目的地的ID是什么,因此您必须在原始消息中实际包含该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/
答案 1 :(得分:1)
嗯,这是你的问题,NetGroup不是针对单个对等'发送'。正如文档所说“NetGroup类的实例代表RTMFP组的成员身份”,所有这些发送方法都与协议邻居有关(您需要更多地了解RTMFP如何工作;它是一个非常巧妙的分散式p2p协议)。
您唯一可行的选择是使用直接连接,它与使用NetGroup一样可靠。唯一的“可靠性”问题是与同伴的连接。如果你想要更强大的东西,你需要第三方服务器,但根据我的经验,这是不需要的。您只需要让客户端侦听传入流,并让另一个客户端使用其对等ID连接到另一个对等端(您应该已经通过自己的服务器实现知道了对等ID)。建立连接后,您只需执行netConnection.send('whatever');
。