2

GameKit の GKSession を使用して、他のピアに接続する簡単なゲームを作成しました。セットアップは簡単でしたが、いくつかの問題を発見しました。

  • レイテンシは大きく異なります。メッセージが他のデバイスにすぐに届くことがあります。他のピアにデータを送信する場合、遅延が 1 秒を超えることがあります。データは 10 文字の文字列のみです。

  • 私のゲームは、正確なクロック同期に依存しています。ゲームで音楽が再生されており、接続されているすべてのデバイスで同時に再生が開始されない場合、奇妙に聞こえます。

タイミングを同期する方法に関するドキュメントには何も見つかりませんでした。問題は、ゲームを開始する「マスター」ピアがすぐに音楽の再生を開始し、他のすべてのピアが少し遅れてメッセージを受信し、遅れて再生を開始することです。

次に、すべてのピアに開始メッセージを送信した後、ゲーム音楽の再生を遅らせようとしましたが、遅延が低くなったり高くなったりして、信頼できる同期が得られないことがあります。

ピア ツー ピアとクロックの同期をより信頼性が高く、iOS で使いやすくするオープン ソース フレームワークはありますか?

4

1 に答える 1

3

残念ながら、あなたはここで傷の世界にいます。ネットワーク インターフェイスを介して正確なクロック同期を行うことは非常に困難です。ここでは、デバイスを 20 ミリ秒以内に同期する必要があります。

次のことをお勧めします。50 ミリ秒間隔で一連の ping パケットを送信し、クライアントがすぐに応答するようにします。これの平均を取って平均往復時間 (RTT) を求め、それを半分にして一方向の待ち時間を見積もります。次に、「時計の開始」メッセージを送信し、一方向の遅延を待ってから音楽の再生を開始するまで、ループでスピンします。クライアントは、「開始クロック」を受信したらすぐに音楽を再生する必要があります。

ここで概説されているより堅牢な長期同期ソリューションがあります: http://en.wikipedia.org/wiki/Precision_Time_Protocol

于 2012-12-05T01:54:55.227 に答える