Android Bridge Timeout: RequestBuilder Varsayılan Zaman Aşımı
Android uygulamalarında, sunucuyla iletişim kurmak için genellikle Retrofit gibi HTTP istemci kitaplıkları kullanılır. Retrofit’in RequestBuilder
sınıfı, HTTP isteklerini yapılandırmak için kullanılır ve varsayılan olarak 10 saniyelik bir zaman aşımı süresi vardır.
Zaman Aşımı Süresinin Önemi
Zaman aşımı süresi, sunucunun isteğe yanıt vermesi için beklenen maksimum süreyi belirler. Zaman aşımı süresi çok kısa olursa, sunucu geç yanıt verdiğinde istekler başarısız olabilir. Öte yandan, zaman aşımı süresi çok uzun olursa, yavaş sunucular uygulamanın performansını etkileyebilir.
Varsayılan Zaman Aşımını Değiştirme
RequestBuilder
sınıfının timeout()
yöntemi, zaman aşımı süresini değiştirmek için kullanılır. Zaman aşımı süresi milisaniye cinsinden belirtilir. Örneğin, zaman aşımı süresini 30 saniyeye ayarlamak için şu kodu kullanabilirsiniz:
“`kotlin
val request = Retrofit.Builder()
.baseUrl(“https://example.com”)
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(MyApi::class.java)
val call = request.getPosts()
call.timeout().timeout = 30000
“`
Zaman Aşımı Süresini Dinamik Olarak Ayarlama
Bazı durumlarda, zaman aşımı süresini istek türüne veya sunucuya bağlı olarak dinamik olarak ayarlamak isteyebilirsiniz. Bunu yapmak için Interceptor
arayüzünü uygulayabilirsiniz. Interceptor
‘lar, istekler gönderilmeden önce ve yanıtlar alındıktan sonra çalıştırılan kod parçalarıdır.
Örneğin, sunucuya bağlı olarak zaman aşımı süresini ayarlamak için şu Interceptor
‘ı uygulayabilirsiniz:
kotlin
class ServerTimeoutInterceptor : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val url = request.url()
val timeout = when (url.host()) {
"example.com" -> 30000
"example2.com" -> 60000
else -> 10000
}
val newRequest = request.newBuilder()
.timeout(timeout, TimeUnit.MILLISECONDS)
.build()
return chain.proceed(newRequest)
}
}
Bu Interceptor
‘ı Retrofit istemcinize şu şekilde ekleyebilirsiniz:
kotlin
val retrofit = Retrofit.Builder()
.baseUrl("https://example.com")
.addConverterFactory(GsonConverterFactory.create())
.addInterceptor(ServerTimeoutInterceptor())
.build()