[Okhttp针对单个请求的多个响应处理

问题描述 投票:0回答:1

我有一个android应用程序,我正在尝试使用okHttp版本3.13.1进行http / 2调用,在我的情况下,对于一个请求,我将依次从服务器接收两个响应,但是使用okHttp客户端,只有一个响应,并且如果我尝试使用curl命令发送请求,我将从服务器顺序接收两个响应。

是否有一种方法可以为Android中的单个http / 2请求处理多个响应?

我尝试了各种方法,但没有运气:(如果有人可以提供您的意见,那会比高兴的多。

感谢您的帮助和提前的时间!

我基本上是使用okHttp客户端从android应用程序将get请求发送到支持http / 2的服务器,因此希望及时收到针对该单个请求的2个不同响应。即第二个响应将从5秒后收到第一响应的服务器。

下面是我的回复:

第一回复事件:初始化

{"session_id":"df313001-6461-431c-bcc1-7cb931bda4f5","deviceId":"YL0012345678"}

第二响应事件:voice_response数据:{"intents":[{"version":0,"intent":"telstra_intent_voice","params":{"voiceResponse":{"displayText":"Launching now","vuiFileName":"E03.01.P2.V01.E.wav"},"action":{"ecp":"/launch-install/71361"}}}],"deviceId":"YL0012345678","channelId":"269671"}

但是,在我的情况下,一旦收到第一个响应,客户端将不再向服务器列出。当我收到第一个回复时,在日志中看到:com.example.okhttp3 D / OkHttp:

感谢您的帮助!

android okhttp3 http2
1个回答
0
投票

我找到了解决方法。您可以将响应作为multipart data发送。然后将所有响应封装到以“边界”分隔的多部分数据中。直到您发送“结束标记”(0),多部分数据才会结束。然后,当服务器发送多部分数据时,客户端可以同时对所有响应进行一次解码。多部分数据将如下所示:

--boundary
response_1

--boundary
response_2

...
--boundary--

0

this link中还有一个演示。

© www.soinside.com 2019 - 2024. All rights reserved.