golang学习篇章

golang的http几个重要参数

2021-12-01  本文已影响0人  Best博客

场景一: 单机客户端需要并发10万http请求到一个同一个服务器

  1. 客户端并发发动http请求,根据tcp协议,谁主动关闭谁就进入TIME_WAIT(等个1-4分钟),且一般都是客户端主动断开, 如此发送请求的客户端端口很定会不够用的(哪怕你调到系统最大级别)

TIME_WAIT: 锁定的是 协议、本地IP、本地端口、远程IP、远程端口 这样一组资源(禁止规定时间内本机再使用这样一组资源)。需要等个2 MSL

方案:

总结:其实第4,5步系统默认有值,拿出来是需要注意不要跟1,2,3配置冲突了

//golang默认的http.Client的 Transport 配置
var DefaultTransport RoundTripper = &Transport{
    Proxy: ProxyFromEnvironment,
    DialContext: (&net.Dialer{
        Timeout:   30 * time.Second,
        KeepAlive: 30 * time.Second,
    }).DialContext,
    ForceAttemptHTTP2:     true,
    MaxIdleConns:          100,
    IdleConnTimeout:       90 * time.Second,
    TLSHandshakeTimeout:   10 * time.Second,
    ExpectContinueTimeout: 1 * time.Second,
}

场景二:单机客户端需要并发10万http请求到10万个不同服务器

第一步:将进程配置到操作系统允许的最大端口个数(6万多)
第二步:考虑将time_wait的系统时间调小(但这个感觉还是遵循tcp默认规则好些)
第三步:考虑自己设计一个资源池安全限速(令牌桶或者漏桶算法)
第四步:参考场景一

参考文献

https://zhuanlan.zhihu.com/p/361792917?utm_medium=social&utm_oi=1351439228794986497

上一篇 下一篇

猜你喜欢

热点阅读