当连续多次发送请求时,Golang http请求会导致EOF错误

前端之家收集整理的这篇文章主要介绍了当连续多次发送请求时,Golang http请求会导致EOF错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试调试一个非常不寻常的错误,我正在接收一个简单的REST库I wrote.

我正在使用标准的net / http包来获取,发布,放置,删除请求,但是当我连续进行多个请求时,我的测试偶尔会失败.我的测试看起来像这样:

func TestGetObject(t *testing.T) {
    firebaseRoot := New(firebase_url)
    body,err := firebaseRoot.Get("1")
    if err != nil {
        t.Errorf("Error: %s",err)
    }
    t.Logf("%q",body)
}  

func TestPushObject(t *testing.T) {
    firebaseRoot := New(firebase_url)
    msg := Message{"testing","1..2..3"}
    body,err := firebaseRoot.Push("/",msg)
    if err != nil {
        t.Errorf("Error: %s",body)
}

我正在提出这样的要求:

// Send HTTP Request,return data
func (f *firebaseRoot) SendRequest(method string,path string,body io.Reader) ([]byte,error) {
url := f.BuildURL(path)

// create a request
req,err := http.NewRequest(method,url,body)
if err != nil {
    return nil,err
}

// send JSON to firebase
resp,err := http.DefaultClient.Do(req)
if err != nil {
    return nil,err
}

if resp.StatusCode != http.StatusOK {
    return nil,fmt.Errorf("Bad HTTP Response: %v",resp.Status)
}

defer resp.Body.Close()
b,err := IoUtil.ReadAll(resp.Body)
if err != nil {
    return nil,err
}

return b,nil
}

有时它有效,但大多数时候我会遇到1或2个故障:

--- FAIL: TestGetObject (0.00 seconds)
firebase_test.go:53: Error: Get https://go-firebase-test.firebaseio.com/1.json: EOF
firebase_test.go:55: ""

--- FAIL: TestPushObject (0.00 seconds)
firebase_test.go:63: Error: Post https://go-firebase-test.firebaseio.com/.json: EOF
firebase_test.go:65: ""
FAIL
exit status 1
FAIL    github.com/chourobin/go.firebase    3.422s

当我发出超过1个请求时,会发生故障.如果我注释掉除PUT请求之外的所有内容,测试将一直通过.一旦我包括第二个测试,例如GET,一个或另一个失败(有时都通过).

任何帮助赞赏,谢谢!

链接到来源:http://github.com/chourobin/go.firebase

我要猜测你的代码没有问题.您的问题最可能的原因是因为服务器正在关闭连接.速率限制是一个可能的原因.

您的测试不应该依赖于非常脆弱而不是密封的外部服务.相反,您应该考虑在本地旋转测试服务器.

原文链接:https://www.f2er.com/go/186945.html

猜你在找的Go相关文章