12读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(二)窗口唤醒
在读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(一)上一篇中,我们让服务端不读,这一篇中,让她等12s再读,看看滑动窗口变化通信
代码不变,server 启动时 +参数12
结论:
1 为什么sleep 12s,因为要与客户端阻塞后每5s发送一次的询问区分开
2 到25号报文,服务端告诉客户端我这边只有52个字节缓冲了,客户端写入100字节,阻塞,经过5s未收到服务端的Tcp Window Update,无奈之下拆包先发送52个字节,又等了5s,等不及了,主动询问服务端有没有空间(len=1),被告知没有(报文28-29),这一段,与读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(一)同
3 经过sleep 12s,服务端终于读了所有缓冲区的内容,空出1072个字节,并主动告诉客户端,我有空间了,来来来(Tcp WIndow Update)
4 请注意,此时31号报文,客户端接到服务端电话,好先把之前发送缓冲区的48个字节(未在图中标红31报文)发出去,在此期间并未唤醒write先填满剩余的52个字节
5 从33号报文开始,正常推送100字节直至程序结束