gpt4 book ai didi

okhttp - Okio Throttler 与 OkHttp 的集成

转载 作者:行者123 更新时间:2023-12-05 03:24:01 26 4
gpt4 key购买 nike

我的团队正受此困扰issue使用 slack 集成来上传文件,因此根据该问题中的评论,我想限制我们的 Kotlin 实现中的请求。

我正在尝试集成 Okio Throttler在 OkHttp 拦截器中,所以我有设置:

val client = OkHttpClient.Builder()
.retryOnConnectionFailure(false)
.addInterceptor { chain ->
val request = chain.request()
val originalRequestBody = request.body
val newRequest = if (originalRequestBody != null) {
val wrappedRequestBody = ThrottledRequestBody(originalRequestBody)
request.newBuilder()
.method(request.method, wrappedRequestBody)
.build()
} else {
request
}
chain.proceed(newRequest)
}
.build()
class ThrottledRequestBody(private val delegate: RequestBody) : RequestBody() {
private val throttler = Throttler().apply {
bytesPerSecond(1024, 1024 * 4, 1024 * 8)
}


override fun contentType(): MediaType? {
return delegate.contentType()
}

override fun writeTo(sink: BufferedSink) {
delegate.writeTo(throttler.sink(sink).buffer())
}
}

看起来 throttler.sink 返回一个 Sink,但是方法 delegate.writeTo 需要一个 BufferedSink >,所以我调用了 buffer() 来获取 BufferedSink。我做错了吗? .buffer() 的调用是否破坏了集成?

最佳答案

这几乎是完美的。您只需要在完成后刷新缓冲区,否则它将以内部几个字节结束。

override fun writeTo(sink: BufferedSink) {
throttler.sink(sink).buffer().use {
delegate.writeTo(it)
}
}

关于okhttp - Okio Throttler 与 OkHttp 的集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72377281/

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