net/http transport 参数讲解

从滑动窗口的角度出发,理解transport的参数。

环境:一个客户端(client),一个服务端(server),client向server发送请求。

1. MaxConnsPerHost:忙碌状态下,滑动窗口大小。(对每个Host的最大连接数)。

情况1:

参数值:MaxConnPerHost=5,总请求数=25,假设响应的顺序就是请求的顺序

请求发送过程:先发送5个请求,剩下20个请求存储在等待队列中,当收到一个响应后,滑动窗口向前一步,从等待队列中取出一个请求并发送,再收到一个响应后,滑动窗口再向前一步,从等待队列中取出一个请求并发送,直到等待队列为空,发送完成。

连接情况:一共建立了5条连接,复用这5条连接发送数据(5=MaxConnPerHost)。

2. MaxIdleConnsPerHost:空闲状态下,滑动窗口大小。(空闲状态下,对每个Host的最大连接数)

情况2:

参数值:MaxIdleConnsPerHost = 3,假设响应的顺序就是请求的顺序

前情提要:在情况1结束之后,等待队列已经空闲了10s,此时又有新的30个新的请求一起到达。

滑动窗口情况:由于等待队列空闲了10s,请求发送状态为空闲,所以滑动窗口大小从5(MaxConnPerHost)变成 3(MaxIdleConnsPerHost)。

请求发送过程:先发送3个请求,剩下的27个请求存储在等待队列中,当收到一个响应后,滑动窗口向前一步,从等待队列中取出一个请求并发送,再收到一个响应后,滑动窗口再向前一步,从等待队列中取出一个请求并发送。

滑动窗口情况:由于请求到达数量较多,请求发送状态为忙碌,所以滑动窗口大小从3(MaxIdleConnsPerHost)变成5(MaxConnPerHost)。

请求发送过程:由于滑动窗口增大2,所以立即从等待队列中取出2个请求并发送,然后继续等待响应到达,每到达一个新响应,滑动窗口向前一步,从等待队里中取出一个请求并发送。

连接情况:在滑动窗口大小从5变成3后,原来的5条连接中有2条被回收,只复用剩下的3条连接,在滑动窗口大小从3变成5后,建立两条新连接,复用这5条连接发送数据。

特别提醒:如果新的30个请求是串行缓慢的到达,比如每隔1s到达一个新请求,则请求发送状态仍为空闲,滑动窗口大小一直是3,不会建立两条新连接,只是复用之前的3条连接发送数据。

3.  IdleConnTimeout:空闲连接的等待时间。 

情况3:

参数值:IdleConnTimeout = 10s

前情提要:在情况1或者情况2之后,等待队列已经空闲了20s,也就是说5条连接已经空闲了20s,此时又有新的10个请求到来。

连接情况:由于IdleConnTimeout = 10s < 20s,所以旧的5条连接已经关闭,系统重新建立5条新连接。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值