在API,有:
val http = Http.configure(_
.setConnectionTimeoutInMs(1)
)
这个配置是什么?我用它:
.setMaxRequestRetry(0)
我打了很长时间后我将失败的未来 . 未来我这样创造:
val f = http(u OK as.String)
f.map {
NotificationClientConnectionParams.parseFromString
}
但是,在我超时之后很久就取得了成功,而不是失败 . 它应该如何工作?
我的测试看起来像这样:
val startTime = java.time.LocalTime.now()
val f = TcpUtil2.registerClientViaDispatch(ClientHeaders("12345", "123456789"))
f onSuccess {
case c =>
println(s"Success: $c")
println(java.time.Duration.between(startTime, java.time.LocalTime.now()).toMillis)
}
f onFailure {
case e =>
println(s"failure:${e.getMessage}")
}
Thread.sleep(2000)
响应时间是几百毫秒,我获得了成功 . 这是派遣的错误吗?
1 回答
HTTP往返经历了几个阶段(过度简化):
Build 连接
Build 了
连接
发送请求有效负载
请求有效载荷已发送
等待响应有效负载
接收响应有效负载
收到
响应有效载荷
根据我的理解,你可以衡量1到7号州之间的时间 .
setConnectionTimeoutInMs
来自async-http-client,内部由Dispatch使用 . 以下是its documentation的摘录:因此,此方法设置客户端在状态1和2之间等待的最长时间 .
还有setRequestTimeoutInMs:
这种方法似乎设置了状态5和6之间的时间(或7,我不确定哪一个) .
所以这里可能会发生's what' . 你连接到远程主机,服务器很快接受连接(1到2之间的时间很小),所以你的
Future
没有设置请求超时,因此你的Future
没有失败 .