簡體   English   中英

Okio Throttler 與 OkHttp 的集成

[英]Okio Throttler integration with OkHttp

我的團隊在上傳文件時遇到了松弛集成的問題,因此根據該問題中的評論,我想在我們的 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)
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM