2012-08-23 10 views
12

私はGameKit.frameworkで働いていると私は2つのiPhoneの間で信頼性の高い通信を作成しようとしています。GameKitの通信はGKMatchSendDataReliableと信頼性がありますか?

私はGKMatchSendDataReliableモードでパッケージを送信しています。

ドキュメントは言う:

GKMatchSendDataReliable

が正常に受信者または接続がタイムアウトにより受信されるまで、データが連続して送信されます。 信頼できる送信は、送信された順に送信されます。配送を保証する必要がある場合に使用します。

iOS 4.1以降でご利用いただけます。 GKMatch.hで宣言されています。

WiFi接続に問題が発生しました。 GameKitは、接続が失われたと宣言しませんが、パッケージが到着しないことがあります。 GKMatchSendDataReliableを使用するか、またはAppleはちょうど彼らが実装されていませんでした何かのために派手な名前を使用しているとき

私は100%の信頼性の高い通信を頼りにすることはできますか?

+0

私は信頼性の高いモードを使用したことはありませんが、シミュレータでGCアプリケーションをテストすると多くの問題が発生しました。 2つのデバイスでアプリをテストすることを確認してください。 – Adam

答えて

1

ユーザーは、ゲーム中に誤って一部のデータが失われる可能性もあると不平を言います。私はtest appと書いて、GKMatchSendDataReliableは本当に信頼できるものではないことを理解しました。インターネット接続が弱い場合(EDGEなど)、Game Center APIからエラーがなくても定期的にパケットが失われます。

唯一のオプションは、信頼性の高い配送のために追加のトランスポートレイヤーを追加することです。

私は、この目的のために、単純なlibに書いた:RoUTPを。送信されたすべてのメッセージを受信ごとに保存し、失われたものを再送信し、シーケンスが破損した場合に受信したメッセージをバッファします。 私のテストでは、 "RoUTP + GKMatchSendDataUnreliable"は "RoUTP + GKMatchSendDataReliable"よりも優れています(純粋なGKMatchSendDataReliableよりも信頼性がありません)。

+1

私はあなたと同意する証拠を収集しました。私はこれに驚いていることを認めなければなりません。アップルにはとても失望していません。私は真剣に、信頼性の高い接続はまったく信頼できないという意味ですか?私は複数のトランスポート層の上にあるゲーム層の上にトランスポート層を追加する必要がありますか?次に、アプリケーションにハードウェアフローコントロールを書き始めますか? FFS。 – theLastNightTrain

0

あなたが時々必要なものそれはほぼ100%の信頼性が、そうでないかもしれない...たとえば、あなたがGKMatchSendDataReliableを経由して送信するすべてのものは、あなたがそれらを送ってきたために送信されますネットワークから脱落しました。 これはターンベースのゲームではすばらしいですが、速い反応が必要な場合、ネットワークのドロップアウトは、リアルタイムで再開するまで、遅れたパッケージをすべて紛失してしまう忘れたパッケージを忘れることはありません。

場合GKMatchSendDataReliableがデータを送信しませんが、接続タイムアウトです。 これは、アプリケーションを閉じるときにも当てはまると思います。

関連する問題