問題タブ [gksession]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - GKSessionでピアツーピアを行うときに正確なクロック同期を取得するにはどうすればよいですか?
GameKit の GKSession を使用して、他のピアに接続する簡単なゲームを作成しました。セットアップは簡単でしたが、いくつかの問題を発見しました。
レイテンシは大きく異なります。メッセージが他のデバイスにすぐに届くことがあります。他のピアにデータを送信する場合、遅延が 1 秒を超えることがあります。データは 10 文字の文字列のみです。
私のゲームは、正確なクロック同期に依存しています。ゲームで音楽が再生されており、接続されているすべてのデバイスで同時に再生が開始されない場合、奇妙に聞こえます。
タイミングを同期する方法に関するドキュメントには何も見つかりませんでした。問題は、ゲームを開始する「マスター」ピアがすぐに音楽の再生を開始し、他のすべてのピアが少し遅れてメッセージを受信し、遅れて再生を開始することです。
次に、すべてのピアに開始メッセージを送信した後、ゲーム音楽の再生を遅らせようとしましたが、遅延が低くなったり高くなったりして、信頼できる同期が得られないことがあります。
ピア ツー ピアとクロックの同期をより信頼性が高く、iOS で使いやすくするオープン ソース フレームワークはありますか?
iphone - 3 つ以上のデバイス間で P2P を可能にする、GKSession のより信頼性の高い代替手段はありますか?
Bonjourの方が信頼性が高いという指摘もありました。Bonjour は WiFi のみで、Bluetooth をサポートしていませんね。
GKSession
Bonjour と Bluetooth のすべての優れた機能を 1 つの使いやすい API に組み合わせた代替手段が必要ですが、私はそれを見つけることができません。
プレイヤーがいつでも参加できるゲームには最大 8 台のデバイスを自動的に接続する必要がありGKSession
、PeerToPeer には合計 3 台の制限があるようです。
iphone - GKSession 呼び出しはメイン スレッドをブロックしていますか?
テクニカル ノートTN2277で、アプリがバックグラウンドになったときにあらゆる種類のネットワーク ソケットを閉じることが重要であると読みました。これには、おそらく GKSession も含まれます。
彼らは、バックグラウンドに移行するときに有効期限ハンドラーが必要であり、他のピアに「さようなら」と言わなければならない場合、ネットワーク コードを非同期的に呼び出す必要があると述べています。
GKSession sendData メソッドは非同期ですか、それともブロックですか?
iphone - すべてのピアが他のすべてのピアと双方向に接続すると害がありますか?
アプリのインスタンスがサーバーとクライアントの両方であるピア モードで GKSession を使用しています。
次のように他のピアに接続します。
アプリを実行しているデバイスが 1 つあり、アプリを実行している別のデバイスを起動すると、両方のデバイスがお互いを認識し、-connectToPeer:withTimeout: を送信します。
私が理解できないのは、双方向通信が必要な場合、相互に接続したい2つのデバイスのうちの1つだけが connectToPeer:withTimeout: リクエストを送信するだけで十分かということです。
そして、双方向の接続要求が問題を引き起こすのではないかと心配しています。このようにやみくもにこれで問題ありませんか、それともピアのペア間の接続が 1 つだけになるように、より洗練されたチェックを使用する必要がありますか?
編集:テストにより、1つのピアが他のピアに接続するだけで十分であることが明らかになりました。また、各ピアが他のピアが使用可能になるのを確認することもテストされています。したがって、上記のコードは、余分な接続要求を 1 つ作成します。これがネットワークの安定性と容量に悪影響を与えるかどうかという問題は残ります。
iphone - GKSessionの中断を適切に処理する方法は?
私のオンラインラジオアプリはバックグラウンドミュージックを再生しています。ユーザーが音楽を聴き、アプリを終了して(バックグラウンドに入って)他の場所を探すとき、私はGKSessionを破棄します。それはP2Pモードです。ユーザーがアプリに戻ったら、GKSessionに再接続します。
これは正しいことですか?そして、電話がかかってきたり、その他の中断が発生した場合はどうすればよいですか?また、GKSessionを強制終了して再作成しますか?
iphone - 3 つ以上のクライアントでの GameKit クライアント/サーバーの問題
私は現在、ユーザーが GameKit を使用して友人とコンテンツを共有できるようにする iOS アプリケーションを構築しています。1 つのデバイスがサーバーになり、接続されたピアに送信できます。これは、4 つの接続されたクライアントまでうまく機能しています。
4 番目のクライアントは常に参加して 1 つのファイルを受信できますが、他のすべてのパケットを無視し、エラーやクラッシュ ログが生成されずにクラッシュするようです (アプリケーションを強制的に閉じる必要があります)。
プロジェクトを開始する前に、私は何人かの開発者が P2P で 4 つ以上の接続で問題を抱えていることを読みましたが、クライアント サーバーではこれに関する報告はありませんでした (私は最大 16 人のプレイヤーを読みました)。
誰でも思いつきましたか?
ios - GKSession が 2 つ以上のデバイスと切断される
GKSession を使用してゲームをセットアップしています。これは 2 つのデバイスでうまく機能します。1 つのデバイスは GKSessionModeServer でセットアップされ、もう 1 つのデバイスは GKSessionModeClient でセットアップされます。
ただし、2 つ以上のクライアント (3 つのデバイス、1 つのホストと 2 つのクライアント) があるとすぐに、いずれかのクライアントがランダムに切断されます。エラー ハンドラー (didFailWithError または connectionWithPeerFailed) は呼び出されず、サーバーとクライアントの両方で didChangeState のみが呼び出されます。通常、切断は 1 分以内に発生しますが、それよりも短い場合もあります。
すべてのデバイス (2 つの iPhone と 1 つのシミュレーター) が同じワイヤレス ネットワーク上にあります。1 つの物理デバイスは iOS6.0.1 を実行し、もう 1 つの物理デバイスは 5.1.1 を実行し、シミュレーターへの接続時に両方とも接続を維持できます。問題が発生するのは、3 つのデバイス (2 つの実機、1 つのシミュレート) のみです。
どんな助けでも大歓迎です。
iphone - GameKit マルチスレッド送信は可能ですか?
ファイルとアクションをユーザーに送信できるアプリケーションに取り組んでいます。ユーザーはいつでもサーバーからファイルを要求できます (クライアント サーバー モデル)。場合によっては、ファイルがかなり大きく (10 MB など)、送信中に他の小さなアクションが接続ユーザーに送信されるのが遅れる場合があります。Gamekit には、送信用のスレッドと受信用の別のスレッドがあるようです。
小さなアクションパケットが大きなファイルが送信されるのを待つ必要がないようにするために、追加の送信スレッドを持つことが可能かどうか疑問に思っています。グランドセントラルディスパッチでキューを作成しようとしましたが、残念ながら、送信はまだ1つのスレッドしか使用していないようです.
大きなファイルの送信を「中断」するために個別の小さなアクション パケットを取得することは可能だと思いますが、これはかなり複雑であり、もっと簡単な方法があるかどうか疑問に思っていました。
xcode - iPad とシミュレーター間の GKSession のテスト (iOS 6)
シミュレーターと iPad の間で GKSession を開始しようとしています。しかし、クライアントとサーバーをそれぞれリストしようとするため、接続すらしていないと思います。デバイスとシミュレータの両方に何も表示されません。私はこの Ray Wenderlich のチュートリアルhttp://www.raywenderlich.com/12735/how-to-make-a-simple-playing-card-game-with-multiplayer-and-bluetooth-part-1を試していました。チュートリアルの一部。さて、彼らのプロジェクトをダウンロードして実行してみました。クライアントとサーバーがリストされていないため、まったく接続していないと想定しています。そして、私はiOS6.0.1で使用しているので、おそらくそれを考えていましたか? バージョンの問題だと思いますか?
上記のチュートリアルに従おうとしただけなので、ここにコードを投稿していません。そしてもちろん、他のエラーはありません..クライアントとサーバーがリストされていないだけで、完全に正常に動作しています.
どんな助けでも大歓迎です。
iphone - GKSession Bluetooth デバイスが範囲外になったときの判断
GKSession, GKSessionDelegate
多数のiX(iPod、iPad、iPhoneなど)デバイス間のピアツーピアBluetooth接続を実装するために使用しています。現在利用可能な/接続されている範囲内のデバイスのリストを表示したい。
現在頼りにしている
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
これをする。残念ながら、このメソッドは、デバイスが範囲外になったときに確実に呼び出されるようには見えません。デバイスが範囲内にあるかどうかを判断する「より良い」方法はありますか?
いくつかのコード: