GAE Golang-网址提取超时?

我在Go上的Google App Engine上遇到urlfetch的超时问题。该应用似乎不希望花费超过5秒的超时时间(它忽略了更长的超时并在自己的时间后超时)。


我的代码是:


var TimeoutDuration time.Duration = time.Second*30


func Call(c appengine.Context, address string, allowInvalidServerCertificate bool, method string, id interface{}, params []interface{})(map[string]interface{}, error){

    data, err := json.Marshal(map[string]interface{}{

        "method": method,

        "id":     id,

        "params": params,

    })

    if err != nil {

        return nil, err

    }


    req, err:=http.NewRequest("POST", address, strings.NewReader(string(data)))

    if err!=nil{

        return nil, err

    }


    tr := &urlfetch.Transport{Context: c, Deadline: TimeoutDuration, AllowInvalidServerCertificate: allowInvalidServerCertificate}


    resp, err:=tr.RoundTrip(req)

    if err != nil {

        return nil, err

    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {

        return nil, err

    }

    result := make(map[string]interface{})

    err = json.Unmarshal(body, &result)

    if err != nil {

        return nil, err

    }

    return result, nil

}

无论我尝试设置什么TimeoutDuration,该应用程序都会在大约5秒钟后超时。如何防止它这样做?我在代码中犯了一些错误吗?


白猪掌柜的
浏览 255回答 3
3回答

慕工程0101907

请尝试以下代码:// createClient is urlfetch.Client with Deadlinefunc createClient(context appengine.Context, t time.Duration) *http.Client {    return &http.Client{        Transport: &urlfetch.Transport{            Context:  context,            Deadline: t,        },    }}这是使用方法。// urlfetchclient := createClient(c, time.Second*60)由@gosharplite提供

Smart猫小萌

对我来说,这行得通:ctx_with_deadline, _ := context.WithTimeout(ctx, 15*time.Second) client := urlfetch.Client(ctx_with_deadline)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go