GO中 TCP 的receivebuffSize sendBufSize 第一次偶尔失效

wangbintao1992 · · 954 次点击
polaris
社区,需要你我一同完善!
抓包看看呢?
#1
更多评论
没读满不是很正常的事吗?tcp只要ack确认了就会给应该层,比如你发送了2000bytes,你客户端可能收到好几次read事件,分别是500,1500bytes,还有可能出现tcp粘包啥的。
#2
tcp是slow-start的,这意味着最开始速率非常低逐渐上升达到阈值之后通过算法控制,具体我记不清楚了,并且tcp设置了nagle算法(一般可以自定义关闭),小包汇聚减少IO次数,所以说tcp是一个不太好揣测的东西。需要良好的自定义协议,封包拆包。但是我觉得slow-start已经够说明为什么第一次buf读不满了,因为底层的io.Reader没有那么多数据可读。 然后因为你说是”第一次“buf读不够,一般如果缓存size小于buf的length,那么这个缓存是失效的,也就是只要底层的io.Reader数据够,那就怎么都会填满。次次除了最后一次都会填满。 如果缓存size大于buf的length,第一次都读不够那就只可能还是io.Reader数据不够,因为数据要先填满缓存。
#3