【问题标题】:How can I send a streamed response using OkHttp's mockwebserver?如何使用 OkHttp 的 mockwebserver 发送流式响应?
【发布时间】:2022-01-19 11:17:10
【问题描述】:

从服务器向客户端返回文件内容的典型流程是:

1.) 获取文件的输入流 2.) 将流的块写入打开的套接字 3.) 关闭输入流

当使用 OkHttp 的 mockwebserver 时,MockResponse 只接受 Okio 缓冲区。这意味着我们必须在发送之前将整个输入流内容读入缓冲区。如果文件太大,这可能会导致 OutOfMemory 异常。有没有办法在不使用双工响应的情况下完成我上面概述的逻辑流程,还是应该使用另一个库?这是我目前在 kotlin 中发送文件的方式:

 val inputStream = FileInputStream(file)

 val source = inputStream.source()

 val buf = Buffer()
 buf.writeAll(source.buffer())

 source.close()

 val response = HTTP_200
 response.setHeader("Content-Type", "video/mp4")
 response.setBody(buf)

 return response
 // Dispatch the response, etc...

【问题讨论】:

    标签: okhttp mockwebserver


    【解决方案1】:

    这是 MockWebServer 的设计限制,保证服务端没有 IOExceptions。如果您的响应超出内存中的容量,则 MockWebServer 是不适合这项工作的工具。

    【讨论】:

    • 感谢杰西的回答!
    猜你喜欢
    • 2014-03-17
    • 2015-04-11
    • 2016-01-31
    • 2018-06-26
    • 2017-07-03
    • 2019-09-12
    • 1970-01-01
    • 2015-03-10
    • 2018-09-22
    相关资源
    最近更新 更多