使用 ResponseWriter.Write 时,在 Go 中的 250 个连接后出现

我有以下 http 客户端/服务器代码:


服务器


func main() {


    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        fmt.Println("Req: ", r.URL)

        w.Write([]byte("OK")) // <== PROBLEMATIC LINE

        // w.WriteHeader(200) // Works as expected

    })


    log.Fatal(http.ListenAndServe(":5008", nil))

}

客户


func main() {


    client := &http.Client{}


    for i := 0; i < 500; i++ {

        url := fmt.Sprintf("http://localhost:5008/%02d", i)

        req, _ := http.NewRequest("GET", url, nil)

        _, err := client.Do(req)


        if err != nil {

            fmt.Println("error: ", err)

        } else {

            fmt.Println("success: ", i)

        }


        time.Sleep(10 * time.Millisecond)

    }

}

当我在服务器上运行上面的客户端时,在 250 个连接之后,我从 client.Do 收到以下错误:

error:  Get http://localhost:5008/250: dial tcp: lookup localhost: no such host并且没有更多的连接会成功。


但是,如果我从w.Write([]byte("OK"))==>更改服务器中的行,w.WriteHeader(200)则连接数量没有限制,并且可以按预期工作。


我在这里缺少什么?


慕斯709654
浏览 219回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go