3

Adobe Cirrus は、ピアツーピアでデータを転送するための多数のオプションを提供しています。いくつか例を挙げると、ダイレクト ルーティング、オブジェクト レプリケーション、およびマルチキャストです。

特定のピアにデータを送信したいだけです。他のピアが転送中に「見る」のは問題ありません。

ダイレクト ルーティング (当然の答え) を使った私の実験はうまくいきませんでした。sendto... メソッドはすべて失敗しますが、NetGroup.post は同じネットグループで正常に動作します。信頼性のために、直接接続を使用することに懸念があります。

1 対 1 のメッセージング戦略 (1 対多ではない) を正常に実装し、接続されていないピア間でメッセージを送信できる (ダイレクト ルーティング)、またはこの問題を正常に解決した人はいますか?

私はさまざまな回避策を検討していますが、これらのNetGroup方法sendToNearestが , sendToNeighbour&sendToAllNeighbours明らかな理由もなく失敗しているように見えることに非常に当惑しています。

4

2 に答える 2

2

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/

于 2011-11-04T07:02:01.993 に答える
1

さて、ここに問題があります.NetGroupは単一のピア「送信」用に作成されていません. ドキュメンテーションに「NetGroup クラスのインスタンスは RTMFP グループのメンバーシップを表す」と書かれているように、これらの send メソッドはすべてプロトコル ネイバーに関連しています (RTMFP のしくみについて詳しく読む必要があります。これは本当に独創的な分散型 p2p プロトコルです)。

唯一の実行可能なオプションは、直接接続を使用することであり、NetGroup を使用するのと同じくらい信頼性があります。唯一の「信頼性」の問題は、ピアへの接続にあります。より堅牢なものが必要な場合は、サードパーティのサーバーが必要になりますが、私の経験ではこれは必要ありません. 着信ストリームをリッスンするクライアントを用意し、ピア ID を使用して他のピアに接続する必要があります (独自のサーバー実装を通じてピア ID を既に知っている必要があります)。接続が確立されたら、あとはnetConnection.send('whatever');.

于 2011-06-17T13:17:56.387 に答える