我有一个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:<-END HTTP(166字节的正文), 因此没有收到第二次回复。
感谢您的帮助!
答案 0 :(得分:1)
我找到了解决方法。您可以将响应作为多部分数据发送。然后将所有响应封装到由“边界”分隔的多部分数据中。直到您发送“结束标记”(0),多部分数据才会结束。然后,当服务器发送多部分数据时,客户端可以同时对所有响应进行一次解码。 多部分数据将如下所示:
--boundary
response_1
--boundary
response_2
...
--boundary--
0
还有一个演示here。