求助各位大神一个问题! 感谢

pjc685 · · 2205 次点击
polaris
社区,需要你我一同完善!
如果 buffer 满了,客户端会通过 winsize=0 告知服务端 buffer 满了,这时服务端不会再发送数据,而是会检测客户端啥时候buffer酉空间了(或客户端酉空间了告知服务端)。因此,从这个意义上来说,可以通过控制读取速度来控制从服务器拉数据的速度。 Linux TCP socket buffer 相关的知识: socket buffer size缺省为64 kB. 理论上,最优的buffer大小为<bandwidth>*<round-trip delay> 可以通过下列命令改变其大小(如256KB) % sysctl -w net.core.rmem_max=262144 ;最大的接收缓冲区大小(tcp连接) % sysctl -w net.core.wmem_max=262144 ;最大的发送缓冲区大小(tcp连接) % sysctl -w net.core.rmem_default=262144;缺省的接收缓冲区大小(tcp连接) % sysctl -w net.core.wmem_default=262144;缺省的发送缓冲区大小(tcp连接) 这些参数在proc/sys下面可以看到; sysctl -p | grep mem:显示当前缓冲区设置 round-trip delay 可由ping命令得到。
#5
更多评论
嗯,是这样的。网络 IO,读的时候才会获取数据。 相关跟代码:[transfer.go?s=7038:7050#L290](http://docs.studygolang.com/src/pkg/net/http/transfer.go?s=7038:7050#L290)
#1
polaris
社区,需要你我一同完善!
HTTP 请求一旦发出,服务端不管你读不读,都会响应数据,也就是数据会传输过来,不过,这时候数据是在操作系统实现的协议栈的buffer中,也就是操作系统保存了。 从 resp.Body 中读,只是从协议数据中把数据读到当前程序中。不会影响网路数据的传输。
#2