OkHTTP未收到HTTP刷新

时间:2018-07-17 13:02:17

标签: java android go multipartform-data okhttp3

我有一个使用OkHTTP(3.11.0)的Java客户端,该客户端将音频样本流式传输到我的GO服务器。服务器正在识别音频,并通过http.Flusher界面逐渐发送中间结果。但是,Java客户端在完成音频流的上传之前无法接收它们。

我编写的用于测试GO服务器的GO客户端即使在从客户端上传时也能够接收它们。

服务器代码

func Recognize(w http.ResponseWriter, r *http.Request) {
flusher, ok := w.(http.Flusher)
    if ok {
        ...//i have logic to get intermediate results
        w.Write([]byte("intermediate results of ASR"))
        flusher.Flush()
    }
}

客户代码

    MultipartBody.Builder multipartBuilder = new MultipartBody.Builder(BOUNDARY)
                    .setType(MultipartBody.FORM)
                    .addPart(jsonPart)
                    .addPart(audioPart);

        Request request = requestBuilder.post(multipartBuilder.build())
                .build();

        Log.v(TAG, "BEFORE MAKING REQUEST");
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                Log.v(TAG, "ON RESPONSE");

        });

仅在将所有音频样本上传到服务器后,我才看到“ ON RESPONSE”日志。

http.Flusher Go文档说“关注”

请注意,即使对于支持Flush的ResponseWriters,如果客户端通过HTTP代理连接,缓冲的数据也可能在响应完成之前才到达客户端。

我该如何解决这个问题?有人请帮助我。

0 个答案:

没有答案