私は OKHttp (バージョン 2.0.0-RC2) と SPDY をIOException: stream was reset: CANCEL
試しており、いくつかの予備テストでかなり多くのリクエストを確認しています。おそらく全リクエストの 10% 以上です。Apache HttpClient と通常の https を使用する場合、私が知る限り、同等の問題は見られませんでした。SPDY が無効になっている場合 ( ) には、OkHttp と同等のものも見られないことは確かですclient.setProtocols(ImmutableList.of(Protocol.HTTP_1_1))
が、100% 信頼できるほど十分なテストを行っていません。
この前の質問では、特にこれらの例外が見られ、それらを無視するようにというアドバイスがありますが、これはおかしなことのように思えます: サーバーからデータを読み取っているときに例外が発生するため、データ処理コード (Jackson を使用) を中止します。そのような場合、私たちは何かをする必要があります。もちろん、リクエストを再試行することもできますが、再試行できない POST リクエストである場合もあります。サーバーからのデータの受信を既に開始している場合は、サーバーが要求されたアクションを既に実行している可能性があります。
理想的には、これらの例外の発生を減らすために実行できるクライアントおよび/またはサーバーの構成がいくつかありますが、私は SPDY をよく理解していないため、どこから始めればよいか、またはサーバー管理者にアドバイスすることができません。チームが探し始めます。
役立つ場合のスタック トレース:
java.io.IOException: stream was reset: CANCEL
at com.squareup.okhttp.internal.spdy.SpdyStream$SpdyDataSource.checkNotClosed(SpdyStream.java:442)
at com.squareup.okhttp.internal.spdy.SpdyStream$SpdyDataSource.read(SpdyStream.java:344)
at com.squareup.okhttp.internal.http.SpdyTransport$SpdySource.read(SpdyTransport.java:273)
at okio.RealBufferedSource.exhausted(RealBufferedSource.java:60)
at okio.InflaterSource.refill(InflaterSource.java:96)
at okio.InflaterSource.read(InflaterSource.java:62)
at okio.GzipSource.read(GzipSource.java:80)
at okio.RealBufferedSource$1.read(RealBufferedSource.java:227)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.loadMore(UTF8StreamJsonParser.java:174)
at com.fasterxml.jackson.core.base.ParserBase.loadMoreGuaranteed(ParserBase.java:431)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString2(UTF8StreamJsonParser.java:2111)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser._finishString(UTF8StreamJsonParser.java:2092)
at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.getText(UTF8StreamJsonParser.java:275)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:205)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeArray(JsonNodeDeserializer.java:230)
at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:202)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:58)
at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:2765)
at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:1546)
at com.fasterxml.jackson.core.JsonParser.readValueAsTree(JsonParser.java:1363)
at (application-level code...)