我有一个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:
感谢您的帮助!
我找到了解决方法。您可以将响应作为multipart data发送。然后将所有响应封装到以“边界”分隔的多部分数据中。直到您发送“结束标记”(0),多部分数据才会结束。然后,当服务器发送多部分数据时,客户端可以同时对所有响应进行一次解码。多部分数据将如下所示:
--boundary
response_1
--boundary
response_2
...
--boundary--
0
this link中还有一个演示。