-
-
Notifications
You must be signed in to change notification settings - Fork 459
超时设置
liujingxing edited this page Feb 25, 2023
·
9 revisions
RxHttp内部默认的读、写、连接超时时间均为10s,如需修改,请自定义OkHttpClient对象,如下:
//设置读、写、连接超时时间为15s
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build();
RxHttpPlugins.init(client);
如果部分请求需要单独设置连接、读、写超时,则可以如下:
RxHttp.get("/service/...")
.connectTimeout(3000) //连接超时3s RxJava/协程下均有效
.readTimeout(4000) //读超时4s RxJava/协程下均有效
.writeTimeout(5000) //写超时5s RxJava/协程下均有效
.toObservableString()
.subscribe(s -> {
//成功回调
}, (OnError) error -> {
//失败回调
});
注:以上连接,读,写操作符在v2.3.4
版本加入的
总超时的意思是,规定时间内要完成某件事情,否则抛出异常,为单个请求设置总超时,使用timeout
操作符,如下:
//协程
val str = RxHttp.get("/service/...")
.toAwaitString()
.timeout(5000) //设置总超时时间为5s,在toAwaitXxx方法后调用
.await()
//RxJava
RxHttp.get("/service/...")
.toObservableString()
.timeout(5, TimeUnit.SECONDS) //设置总超时时间为5s,在toObservableXxx方法后调用
.subscribe(s -> {
//成功回调
}, (OnError) error -> {
//失败回调
});
注:这里设置的总超时时长要小于读、写、连接超时时间之和,否则无效
-
connectTimeout
是指客户端连接服务器的超时时长 -
readTimeout
是指单次读取数据的超时时长,如下载文件时,会读取多次 -
writeTimeout
是指单次写数据的超时时长,如上传文件时,会写多次 -
timeout
是指请求开始到结束的超时时长,具体代表规定时间内要完成某件事情,如:6s内要完成下载任务,否则抛出超时异常
对于connectTimeout、readTimeout、writeTimeout
这三个,如遇超时,会抛出java.net.SocketTimeoutException
异常;
对于协程下的timeout
操作符,如遇超时,会抛出kotlinx.coroutines.TimeoutCancellationException
异常;
对于RxJava下的timeout
操作符,如遇超时,会抛出java.util.concurrent.TimeoutException
异常;