• 是怎么判断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协议的实现!!!!!!!!!!!

  • 相关阅读:
    关于日期
    修改video标签自带按钮的默认样式
    vue相关
    手机
    国内优秀npm镜像
    一些技能整理
    小程序
    $('.mydiv>ul')和$('.mydiv ul')的不同
    Python 字符编码
    Python 正则表达式 补充
  • 原文地址:https://www.cnblogs.com/honpey/p/14352438.html
Copyright © 2020-2023  润新知