zoukankan      html  css  js  c++  java
  • 是怎么判断IO的数据是不是被读完了

    到底是怎么判断出来说一个response是读结束了。应该读出来一个完整的response的数据包,就可以认为都执行结束了吧?读结束了,不close,http链接照样复用。最关键的数据结构应该是bodyEOFSignal

    这一部分需要和httpClient.Do函数联合起来看

    http的外部函数是怎么和transport函数集合在机器的

    do函数里面直接调用transport的roundtrip函数,在roundtrip中选择了一个链接persistConn,然后在这个链接上发送请求,请求就发到了链接的Readloop函数里,染后在这个readloop函数里去获取response,这个response又被返回到链接peristConn的管道中,返回给用户,在这个response中,其实是过滤了若干个钩子,最主要的钩子,是把response的Body给封装了一层,这一层中的函数,就是在transpor中的函数

    2851 type bodyEOFSignal struct {
    2852   body         io.ReadCloser
    2853   mu           sync.Mutex        // guards following 4 fields
    2854   closed       bool              // whether Close has been called
    2855   rerr         error             // sticky Read error
    2856   fn           func(error) error // err will be nil on Read io.EOF
    2857   earlyCloseFn func() error      // optional alt Close func used if io.EOF not seen
    2858 }

    然后在这个函数中会有 n, err = es.body.Read(p)
    这里会有一个EOF的错误,其实这不是一个错误,这是一个数据流结束的标识!!!!!!!
    这应该是http协议的实现!!!!!!!!!!!

  • 相关阅读:
    matplotlib 去掉坐标轴
    求最大公约数最小公倍数及整除求余数等
    数据分析小题
    map,reduce,filter基础实现
    今日成果:爬取百度贴吧
    Jquery瀑布流布局,jQuery Wookmark Load 示例
    html5 input type="color"边框伪类效果
    Jquery点击除了指定div元素其他地方,隐藏该div
    Jquery判断checkbox是否被选中
    Jquery给网页的title取值和赋值
  • 原文地址:https://www.cnblogs.com/honpey/p/14352438.html
Copyright © 2011-2022 走看看