2012-03-08 11 views
8

を使用します。私は簡単なゲームでいくつかのランダムな仲人を行うための最善の方法を思い付くしようとしているランダムマッチングのための唯一のRTMFP(アドビシステムズ社シーラス)

アドビシーラスを使用してnetStreamsの実験をしながら、私は簡単に直接接続を設定することができ、データを送信する、テキスト、ビデオ、偉大であるシーラス・ロジックを使用して、すべての音。シンプルなP2P接続を取得するのはかなり簡単で、必要なときと同じように機能します。

しかし、私は本当にすべてがP2PかかわらあるのでONLY巻雲を用いてランダムマッチメイキング機能を実装したい...私は同じグループ内のランダムなピアをつかむに行くか...それは直接的にはありませんどのように

すでに他の人とつながっていますか?

いくつかのアイデア:

-Iは、多分私はオブジェクトの複製を使用することができます考えていた...と誰かがGroupSpecifierに接続したとき、私はその後、地元たpeerIDとそのステータスを持って、この共有配列に別のオブジェクトをプッシュすることができ。ゲームに参加しているときに配列を変更することができます。しかし、人がウェブウインドウを閉じただけでエントリが削除されるという保証はありません。

-I

もちょうどポストを得ることができるのnearID、および他のピアを含むグループに「ポスト」をやって考えた...とゲームでないものは試してみて、直接戻って接続します。その後、その側がそれらに接続します。そうすれば両者はお互いに直接つながっています。しかし、その後、私は「利用可能」であり、人々の潜在的100Sは...ポストを取得する場合のように感じる...そしてそれらはすべて、それが問題を引き起こす可能性があり、試してみて、一人に接続します。

また、私はsendToNearestをやっていると思っていました...しかし、それは人々にマッチする最良の方法ではありません...私はそう多くの隣人を持つことができるので... 1000人がグループ。あなたは、実際にあなたの隣人と考えられているいくつかのピアにのみ接続することができるでしょうか?その後、基本的に同じ5-10人の人とマッチアップすることができますが、技術的には隣人とみなされます。

+0

すばらしいアイデア!私は最初の2つの組み合わせを好きです、トークン(またはピアの数に基づいてnトークン)。不一致の各ピアには、短時間トークンが割り当てられます。接続する機会であるため、ユーザーの洪水はなく、結果を報告しない場合は削除されます。古い学校トークンリングネットワークのように:) –

答えて

1

Iは1)未知の変数ネットワークの遅延があり、かつ2)接続は、未知の時間に参加して去ることができることを指定したノードを照合する際にタイムアウトと再試行を避けるためにどのような方法はないと思います。

だから、別のノードに接続しようとするすべてのノードには、以下のステートフルなパラメータおく必要があります:私は、私は対戦要求卓越した

  • マイ優れた対戦要求がある持っている別のノード
  • と一致してい

    • をX

ノードには、着信を拒否しなければなりません最初の2つのいずれかが真である場合(着信要求がノードXからのもので、同じノードへの未処理の要求を持っていない場合)両方が偽である場合にのみ一致を要求することができる。

また、一度マッチした、彼らは彼らのパートナーをポーリングまたは切断メッセージを監視し、(アプリケーションが必要とどんなマッチング段階、または終了、に戻って)適切に対応する必要があるかもしれません。ケースであること、あなたは少なくとも、すべてのノードが彼らの最高の試合が誰であるかを事前に知っているようなソートアルゴリズムを作成することによって、ノードを同期するために必要なネットワーク・トラフィックの量を削減し、そのに直接接続を試みることができ

最善のネットワークトラフィック(ブロードキャストポストメッセージなし、ランダムな試みではない)とのベストマッチ

この鍵はpeerIDで、NetGroup内のすべてのノードが自動的に取得します。ノードがNeighborConnectメッセージを受信すると、ノードには近隣ノードの一意のピアIDも含まれます。言い換えれば、すべてのノードは一意的な名前(基本的に大きな乱数である)を持ち、他のすべてのノードの一意の名前を知っています。

このpeerIDは長く、256ビットのようなものです。最初の32ビットをintと見なし、リモートノードのpeerIDを自分のpeerIDとXORし、リモートノードを最低から最高まで並べ替えるソート順序を作成することができます。

これで、すべてのノードには、誰と接続するかという考えがほぼ同じになりました(たとえば、グループを介して伝播する切断/接続メッセージに基づいて違いがあります)。ノードはソートされたリストをトラバースして、最も良い一致に接続しようとします。おそらく失敗した接続試行間のタイムアウトがあります。

これはおそらく理想的な解決策ではないでしょう。おそらくもっと良い方法が存在しますが、ランダムにノードを試したり、ブロードキャストメッセージを使用するよりも優れていると思います。

関連する問題