サイトのトップへ戻る

libGDX ドキュメント 日本語訳

ネットワーク処理

LibGDX では、クロスプラットフォームでのネットワーク操作のためのクラスがいくつか用意されています。 これらのクラスはより一般的にはGdx.net (ソース)として知られています。



機能

  • クロスプラットフォームのHTTP リクエスト
  • マルチプラットフォームの TCP クライアントと設定可能なサーバソケット ( GWTを除く)をサポート
  • 最適化された TCP クライアントと待ち時間の低下を目的として設定されたサーバ
  • クロスプラットフォームのブラウザアクセス。 (例: ゲーム内の下部サイトへのリンクを作成し、それがクリックされると全てのプラットフォームでブラウザが開くようにします。)


実装

クラスの説明:

  • Net.java はクロスプラットフォームのネットワーク処理に使用されるインタフェースです。これを使って、ネットワークとの通信に必要なオブジェクトを取得できます。
  • Socket.java は、 リモートソケットアドレス、コネクション状態、ソケットを扱う java.io.InputStreamと java.io.OutputStreamをあなたへ提供するインタフェースです。
  • SocketHints.java は TCP クライアントソケットの設定に使用するクラスです。
  • ServerSocket.javaは TCP サーバソケットの作成に使用するインタフェースです。接続したTCPクライアントを取得する標準的な accept() メソッドが使用できます。
  • ServerSocketHints.java はTCP サーバソケットの設定に使用するクラスです。
  • HttpStatus.javaは取得したステータスコードが何なのかを簡単に参照するために使用するクラスです。
  • HttpParameterUtils.java はHTTPリクエスト用のユーティリティメソッドを実装したクラスです。
  • HttpRequestBuilderHttpRequestsの作成を手助けするクラスです。

TCP クライアントを作成するには、以下の短いコードを使用します:

Socket socket = Gdx.net.newClientSocket(Protocol protocol, String host, int port, SocketHints hints);

TCP サーバを作成するには、以下を使用します:

ServerSocket server = Gdx.net.newServerSocket(Protocol protocol, int port, ServerSocketHints hints);

HTTP リクエストを送信するには、以下を使用します:

HttpRequestBuilder requestBuilder = new HttpRequestBuilder();
HttpRequest httpRequest = requestBuilder.newRequest().method(HttpMethods.GET).url("http://www.google.de").build();
Gdx.net.sendHttpRequest(httpRequest, httpResponseListener);

GET HTTP リクエストに引数を付けて送信するにはを、以下を使用します:

HttpRequestBuilder requestBuilder = new HttpRequestBuilder();
HttpRequest httpRequest = requestBuilder.newRequest().method(HttpMethods.GET).url("http://www.google.de").content("q=libgdx&example=example").build();
Gdx.net.sendHttpRequest(httpRequest, httpResponseListener);

システムブラウザを開くには以下を使用します:

Gdx.net.openURI(String URI)


注意事項

異なるプラットフォーム上でネットワーク処理を行う場合は、いくつかの注意事項があります。

  1. TCP クライアントとサーバソケットは、GWTでは動作 しません。これは java.net がGWT ではサポートされておらず、現時点でwebsockets以外に実行可能な代替手段がないためです。
  2. ヘッドレス環境や Android のDaydream機能やAndroid のライブ壁紙では、ブラウザを開く動作はサポートされていません。 これは実装やプラットフォーム、もしくはその両方で制限がかかっているためです。
  3. Androidにおいて: ネットワークにアクセスするにはAndroidManifest.xmlファイルに以下のパーミッションを宣言する必要があります: <uses-permission android:name="android.permission.INTERNET" />
  4. Androidにおいて:strict モードを無効にしなければ、メインスレッド上でネットワークにアクセスすることは できません。 これは、ネットワーク操作によってメインスレッドがハングしないようにするためです。詳細はこちらを参照してください。
  5. 携帯端末を動作対象とする場合: ネットワーク処理の実装方法について気をつけてください。無線通信が動いている場合は大量の電力が消費されます。 また、1G/2G/3G/4G LTEネットワークで課されることがあるデータ転送量制限についても気をつけてください。 LibGDX では遅延を軽減するために最適化された設定がなされていますが、この設定はTCPの動作においても有効に働きます。
  6. サポートされるネットワーク構成は、バックエンドとJava実装とでは異なります。
  7. 無線には電力が必要なので、バッテリーの電力消耗はデータの送信と受信が行われる時により多く発生します。
  8. POST リクエストではContent-Typeヘッダを設定するようにしてください。全てのバックエンドで同じ値が既定値になっている訳ではありません(根本的な実装上の違いのため)。 このヘッダで最もよく使用される値は application/x-www-form-urlencodedです。; しかし、あなたが送信するデータのタイプに応じて異なる値が必要になるでしょう (application/xmlapplication/jsonのような)。

以下も参照してください

モバイルデータのバッテリー効率に関する素晴らしい記事が こちらにあります。

Gdx.net クラスのソースコードはこちらにあります。