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

  • 相关阅读:
    [匈牙利] 洛谷 P2526 小狗散步
    [匈牙利] 洛谷 P1129 矩阵游戏
    [树形dp] Jzoj P5233 概率博弈
    [线段树] Jzoj P4231 寻找神格
    [状压dp][期望] 洛谷 P2473 奖励关
    [倍增][双向链表] Jzoj P3101 开车旅行
    [高精度][数学] Jzoj P3771 小Z的烦恼
    [并查集][排序] Jzoj P2940 生成输入数据
    [dfs][概率] Jzoj P2941 贿赂
    [权值线段树] Jzoj P4417 神奇的字符串
  • 原文地址:https://www.cnblogs.com/honpey/p/14352438.html
Copyright © 2011-2022 走看看