0

安らかな Web サービスからデータをフェッチする Android アプリケーションを開発しています。

これを実装する最善の方法を考えていましたが、コードは機能していますが、最適化できると確信しています。現在のコードの状態は次のとおりです。スケジューラを使用して、サービスから restResource を呼び出しています。悪い部分は、リクエストごとに接続を開いたり閉じたりすることです。(残りのリソースはリアルタイムデータを保持します(毎秒フェッチする必要があります)、空の場合は空の配列を返します)

        httpResponse = client.execute(request);
        responseCode = httpResponse.getStatusLine().getStatusCode();
        message = httpResponse.getStatusLine().getReasonPhrase();

        HttpEntity entity = httpResponse.getEntity();

        if (entity != null) {

            InputStream instream = entity.getContent();

            response = convertStreamToString(instream);

            instream.close();
        }

応答で返されるキープアライブ ヘッダーを利用する方法は?

4

1 に答える 1

1

ロング ポーリングを使用する前にこれを実行しました。ロング ポーリングでは、RESTful 呼び出しがタイムアウトになるか、何か応答するまでブロックされます。いずれにせよ、呼び出し元のクライアントは、いずれかの応答 (タイムアウトまたは有効) で RESTful サービスを再度呼び出します。

キープアライブ ヘッダーをどのように使用できるかはわかりませんが、それを送信してから接続を開いたままにするだけのようです。サーバー側の Java コードでは、応答の出力バッファーを取得し、送信を開始します。クライアント側では、入力バッファを取得し (これが Android でどのように発生するかはわかりませんが、Java コードの印象を受けているので、これを行う方法はたくさんあります)、読み取りを開始します。ある時点で、接続を無期限に開いたままにしたくないという理由だけで、接続を強制的に閉じる必要があると思います。

繰り返しますが、私はこの方法を試したことがないので、わかりません。また、これが RESTful サービスの暗黙の法則に違反しているかどうかもわかりません。私はこのアプローチに反するものを読んだことがありません。

于 2012-10-18T13:50:41.407 に答える