XIKEW.COM - 公读宝典 - NetCore HttpClient 踩的坑 - 公读宝典,"Success:", success ,string(body) , " / ", fmt.Sprintf("%d ms", (time.Now().UnixNano() - s) /1e6)) - 这一年的NetCore学习,遇到的大坑都让我变得更强大

NetCore HttpClient 踩的坑
NETCORE 12/4/2020 11:42:20 PM 阅读:8

这一年的NetCore学习,遇到的大坑都让我变得更强大

性能问题

测试电脑配置:

img

测试脚本

使用Golang的并发测试

func main() {
    for i := 0; i < 5000 ; i++ {
        go func(tag int) {
            httpGet("https://127.0.0.1:5001/WeatherForecast", "进程[1]编号 - " + fmt.Sprintf("%d", tag))
        }(i)
    }

    for {
        time.Sleep( 1 * time.Second)
    }
}

var success = 0
func httpGet(url string, tag string) {
    s := time.Now().UnixNano()
    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
        },
    }

    resp, err := client.Get(url)
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)
    success += 1
    fmt.Println(tag , "=====>" , "Success:", success ,string(body) , " / ",  fmt.Sprintf("%d ms", (time.Now().UnixNano() - s) /1e6))
}

测试结果

每个项目只输出Hello World! 每个测试5次取最优结果

成功接收结果次数 | NetCore | LinkCore | Golang | | --- | --- | --- | | 2404 | 3434 | 2968 |

完成总耗时 ms | NetCore | LinkCore | Golang | | --- | --- | --- | | 14908 | 3900 | 2771 |

ASPNetCore 框架的臃肿导致了Web请求的处理能力下降了很多

HttpClient

这个组件真的是让人无力吐槽,一样是并发问题,4C8G Centos7 服务器,10个并发就会导致线程堵塞

官方给的IHttpClientFactory的方案在Windows下会好一些,但是Linux下第一次冲击也会造成堵塞,反正50个并发测试了N次