拨打tcp:socket:打开文件太多

时间:2019-12-30 04:33:07

标签: go

我正在拨号tcp:套接字:加载测试时打开文件太多错误。通过设置ulimit可以正常工作,但是还有其他解决方案不设置ulimit吗?

代码:

package main
import (
 "fmt"
 "io"
 "io/ioutil"
 "encoding/json"
 "net/http"
 )

type Struct_Response struct {
    Meta struct {
        Requestid        string
    }
} 

var HttpClient = &http.Client{}

func main(){
    apiUrl := "http://example.com"
    JsonStr :="teststr"
    conn_token :="1233333333333"
    req, err := http.NewRequest("POST", apiUrl, bytes.NewBuffer(JsonStr))
    if err!=nil{ 
        fmt.Println(err)
    }
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("requestid", "1234")
    req.Header.Set("Authorization", "Bearer "+conn_token)
    req.Header.Set("Connection", "close")

    resp, err := HttpClient.Do(req)
    req.Close=true
    if resp!=nil && resp.StatusCode==200 {
        body, _ := ioutil.ReadAll(resp.Body)
        var Responce Struct_Response
        err := json.Unmarshal([]byte(string(body)), &Responce)
        if err != nil {
            fmt.Println(err)
        }
        io.Copy(ioutil.Discard, resp.Body)
        resp.Body.Close()
    }
}

谢谢。

1 个答案:

答案 0 :(得分:1)

您的问题可能是您没有干净地关闭连接,这会导致在重用TCP端口客户端端口号之前添加延迟。

在上面的代码示例中,仅在状态为200时使用并关闭响应主体。在存在时,您应始终使用/关闭响应主体。