【问题标题】:SocketTimeoutException at 5 seconds - Any way to increase?SocketTimeoutException at 5 seconds - 有什么方法可以增加吗?
【发布时间】:2014-07-07 21:40:15
【问题描述】:

我访问的服务器定期响应 5.5 秒,但我什至在 5 秒时收到 SocketTimeoutException。有没有办法增加这个值?升级到付费等级是否可以让我获得这种能力?

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    https://developers.google.com/appengine/docs/java/urlfetch/#Fetching_URLs_with_java_net

    特别是

    您可以为请求设置最后期限,即最长时间 服务将等待响应。默认情况下,获取的截止日期 是 5 秒。 HTTP 请求的最大截止时间为 60 秒,并且 任务队列和 cron 作业请求 10 分钟。使用时 URLConnection接口,服务使用连接超时 (setConnectTimeout()) 加上读取超时 (setReadTimeout()) 作为 截止日期。

    【讨论】:

      【解决方案2】:

      你没有用任何语言标记你的问题,所以我会尽量涵盖我知道的那些。

      我没有在生产中测试过这些,只是在开发中。

      Python

      似乎支持setdefaulttimeout 方法。您可以将 秒数 传递为 floatint

      import socket
      
      socket.setdefaulttimeout(10)
      
      # create socket connections as usual…
      

      Java

      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,则超时可能包括名称解析。也可能存在不特定于语言的上限,但未记录在案。

      【讨论】:

        猜你喜欢
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多