我有一个使用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代理连接,缓冲的数据也可能在响应完成之前才到达客户端。
我该如何解决这个问题?有人请帮助我。