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协议的实现!!!!!!!!!!!

  • 相关阅读:
    Elastic 技术栈之快速入门
    JDK8 指南(译)
    Intellij IDEA 使用小结
    面向对象1
    函数总结
    Python中i = i + 1与i + = 1的区别
    python中变量的交换
    python的数据类型的有序无序
    对列表里的字典按年龄从小到大排序
    centos7安装python3
  • 原文地址:https://www.cnblogs.com/honpey/p/14352438.html
Copyright © 2011-2022 走看看