1

longpolling ライブラリSignalAでbasic-http-clientを使用しています。basic-http-client は HttpUrlConnection に基づいています。エミュレーターで実行している場合、1 つの長時間実行されるポスト リクエストを開いて、別のポスト リクエストを同時に実行することができます。実際のデバイスでコードを実行すると、最初の POST が完了するまで 2 番目の POST がハングします。getResponseCode 関数にぶら下がっています。

エミュレーターでの実行と実際のデバイスでの実行の違いは何ですか? 複数 AND 同時リクエストを有効にするにはどうすればよいですか?

4

1 に答える 1

1

ここで尋ねられた同様の質問からの解決策の引用:-

HttpURLConnection接続を維持しているときに使用される接続プールが壊れているため、サーバーによって閉じられた接続を使用しようとします。デフォルトでは、Android はすべての接続で KeepAlive を設定します。

System.setProperty("http.keepAlive", "false");は、すべての接続に対して KeepAlive を無効にする回避策であるため、接続プールのバグを回避できます。

conn.setRequestProperty("Connection","Keep-Alive");この特定の接続に対して KeepAlive をオンにし、本質的に何をするかを逆にSystem.setProperty("http.keepAlive", "false");します。

また、接続セットアップを終了する場所が明確になるため、常に明示的に connect() を呼び出します。このメソッドの呼び出しがオプションかどうかはわかりません。

System.setProperty("http.keepAlive", "false");
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();
conn.setUseCaches(false); 
conn.setRequestProperty("User-Agent", useragent);
conn.setConnectTimeout(30000);
conn.setDoOutput(true); 
conn.setDoInput(true); 
consumer.sign(conn);

conn.connect();

InputSource is = new InputSource(conn.getInputStream());
于 2013-04-18T13:37:41.073 に答える