【问题标题】:Okhttp multiple response handling for single request android单请求android的Okhttp多响应处理
【发布时间】:2019-08-27 20:30:29
【问题描述】:

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

有没有办法在 android 中处理单个 http/2 请求的多个响应?

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

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

我基本上是使用 okHttp 客户端从我的 android 应用程序向支持 http/2 的服务器发送一个 get 请求,因此希望及时收到该单个请求的 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:

感谢您的帮助!

【问题讨论】:

  • 当您说多重响应时,这究竟意味着什么?你有两个不同的 json 结构吗?您是否(出于某种原因)期待两个响应,一个接一个,相隔一段时间?
  • @farhanjk - 当我说多个响应时,正如你所说,我期待 2 个响应一个接一个,由大约 3 到 4 秒的特定时间间隔隔开。
  • @farhanjk - 我认为 github.com/launchdarkly/okhttp-eventsource 更像是一个消息传递应用程序。它不适用于我的情况:(

标签: android okhttp3 http2


【解决方案1】:

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

--boundary
response_1

--boundary
response_2

...
--boundary--

0

还有一个演示here

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 1970-01-01
    • 2021-12-02
    • 2020-03-31
    • 2021-12-28
    • 2013-05-10
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多