gpt4 book ai didi

android - 尽管有 flush(),OkHttp 在上传数据之前缓冲了 ~800kb

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:30 24 4
gpt4 key购买 nike

我正在尝试发布图像的上传进度,使用 okhttp 作为我的客户端和 mimecraft 上传它们以打包多部分文件。

当数据写入套接字(如果我没看错的话,以 4kb block 为单位)然后上传时,我添加了日志来写入字节数。

问题是,虽然每次写入一大块数据时我都会在输出流上调用 flush,但在将约 800kb 写入输出流之前似乎没有任何内容上传。一旦它达到那个点,它似乎上传了 ~100kb,然后应用程序将另一个 100kb 写入输出流(就像它释放的空间并且可以写入更多)并继续。

这样做的结果是(超过 1.2mb 的文件)前 800kb 几乎立即被写入/报告,然后它开始上传(通过 charles 网络软件跟踪),然后将开始读/写/上传 100kb在接下来的几秒钟内,一旦我将最后一个字节写入输出流,应用程序就会报告 100% 的上传已写入。尽管网络客户端仍在上传仍在网络缓冲区中的最后 800kb,但它会在那里再上传 5-10 秒,然后完成请求。

有没有人有过这种经历,或者知道这是不是okhttp的通病?

干杯

编辑:如果我上传一个小于 800kb 的文件,我测试了一些 250kb 和 500kb,它们都在上传前立即 100% 写入流,但 3mb 的图像仍会上传 800kb,然后在大约 100kb block ,写入循环就在那里,每次上传一些内容时再写入 100kb。

最佳答案

正如@nmr 的回答所说,这是因为发送缓冲区太高,正如此处的错误票所解释的那样:https://github.com/square/okhttp/issues/1078

所以我创建了一个套接字工厂,让您可以覆盖发送缓冲区大小。

https://gist.github.com/slightfoot/00a26683ea68856ceb50e26c7d8a47d0

关于android - 尽管有 flush(),OkHttp 在上传数据之前缓冲了 ~800kb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23600397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com