【发布时间】:2014-07-07 21:40:15
【问题描述】:
我访问的服务器定期响应 5.5 秒,但我什至在 5 秒时收到 SocketTimeoutException。有没有办法增加这个值?升级到付费等级是否可以让我获得这种能力?
【问题讨论】:
我访问的服务器定期响应 5.5 秒,但我什至在 5 秒时收到 SocketTimeoutException。有没有办法增加这个值?升级到付费等级是否可以让我获得这种能力?
【问题讨论】:
见https://developers.google.com/appengine/docs/java/urlfetch/#Fetching_URLs_with_java_net
特别是
您可以为请求设置最后期限,即最长时间 服务将等待响应。默认情况下,获取的截止日期 是 5 秒。 HTTP 请求的最大截止时间为 60 秒,并且 任务队列和 cron 作业请求 10 分钟。使用时 URLConnection接口,服务使用连接超时 (setConnectTimeout()) 加上读取超时 (setReadTimeout()) 作为 截止日期。
【讨论】:
你没有用任何语言标记你的问题,所以我会尽量涵盖我知道的那些。
我没有在生产中测试过这些,只是在开发中。
似乎支持setdefaulttimeout 方法。您可以将 秒数 传递为 float 或 int:
import socket
socket.setdefaulttimeout(10)
# create socket connections as usual…
socket documentation 声称它本机支持java.net.Socket。根据this answer,你可以指定超时时间毫秒,像这样(10秒):
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 10000);
使用socket.DialTimeout 代替socket.Dial,您可以将超时指定为time.Duration 对象(即纳秒)。
import (
// …
"appengine/socket"
)
func handler(w http.ResponseWriter, r *http.Request) {
c := appengine.NewContext(r)
conn, err := socket.DialTimeout(c, "tcp", "myhost.com:1234", 10*time.Second)
// …
}
请注意,如果您连接到主机名而不是裸 IP,则超时可能包括名称解析。也可能存在不特定于语言的上限,但未记录在案。
【讨论】: