私は大学のサマーインターンシッププロジェクトの一環として、Androidゲームベースの コントラクトブリッジ に取り組んでいます。ゲームは4 =のようなマルチプレイヤーになりますAndroidデバイスで再生できるため、開発するBOTやCPUプレーヤーはありません。プロジェクトを取得した時点で、ほとんどの学生がすでにプロジェクトに取り組んでいるが、作品はどれもないことに気付きました現在、再利用可能です(文書化されていないコードや設計アーキテクチャ、さまざまなプラットフォームの実装など、さまざまな理由で)。
私はいくつかのオープンソースプロジェクトに取り組んだ経験があるので、私が作成したコンポーネントが可能な限り再利用できるように、このプロジェクトに取り組むことに重点を置いています。現在、ゲームはマルチプレイヤーであり、ゲームの進行状況全体がサーバー上で処理されるため、現在サーバーの設計に取り組んでいます。どのクライアントプラットフォームでも使用できるようにゲームサーバーを再利用できるようにしたかったので、以前は- SocketまたはRESTの選択で混乱 ゲームサーバーの設計用ですが、後でサーバーのREST APIで動作するようになりました。
さて、ゲーム内で移動する間、すべてのプレーヤーを同期させておく必要があるため、サーバーでは、各テーブルに固有のすべてのプレーヤーの進行状況を維持するデータベースを使用する予定です(Bridgeでは、4人のプレーヤーが1つのテーブルでプレイします) 、およびサーバーはそのような多くのゲームテーブルを処理します)。
データベースを共有媒体として使用して各ゲームテーブルの進行状況を追跡するのが適切かどうかはわかりません(適切なオプションまたはより優れたオプションがあるかどうかを知らせてください)。明らかに、テーブルのゲームが完了すると、サーバーのデータベース上のそのテーブルのデータは破棄されます。
ここで問題となるのは、RESTサービスへのアクセスはHTTP呼び出しであるため、クライアントが要求を行わない限り、サーバーはアイドル状態のままであり、次のような状況を考慮することです。
それで、状況を説明して、私はサーバー設計のための正しい軌道に乗っていますか?コードをさらに進める前に、確認したかったのです。
サーバーとの間でデータを送受信するためにrestを使用することは良い選択であり、クライアント/サーバー通信のためのよく知られた安定したプロトコルです。ただし、サーバー上で変更があったときに更新(または通知)をクライアントにプッシュするシステムが必要です。そのためには、http Web接続以外のものが必要です。
Androidデバイスでは、Pushテクノロジーを使用するのが最善です。Googleには 少数のサイトその話実装について この種のものです。通知を受け取ったときに、まだデータが含まれていない場合、それをアプリのトリガーとして使用して、通常の方法でデータを取得できます(つまり、「更新」を自動的にクリックします)ボタン)
プッシュシステムを使用したくない場合、もう1つの答えは、プレーヤーがアクティブにプレイしているときにサーバーに対して永続的なtcp/ipソケットを開き、それを介して通知とデータを直接受信することです。
checkout jWebSockets 、An Android websocketプロトコルの実装。サーバーにsocket.ioのようなものがあり、モバイルデバイスにwebsocketクライアントがあると、作業が楽になります。
双方向TCP=ソケットになり、プッシュは必要ありません。