IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> golang http1.1代码实现 -> 正文阅读

[系统运维]golang http1.1代码实现

涉及结构体

  1. Client、Transport、Dailer、Request、Resolver

Request

  1. ctx context.Context 可以设置超时时间

Client

  1. Timeout:整体超时设置,与Request的ctx取较小超时时间

Transport

  1. TLSHandshakeTimeout:tls握手的超时时间,通过AfterFunc实现,超时后,直接返回tlsHandshakeTimeoutError
  2. DisableKeepAlives:如果为true,不会有conn连接池,每次都是开启新连接,不会进行连接复用,与TCP的keep-alive没有关系
  3. persistConn的readLoop和writeLoop一个进行读数据,一个写数据
  4. MaxResponseHeaderBytes:获取返回的Header最大值,默认值为10M,返回的body没有限制,在persistConn里的Read函数实现

persistConn

  1. br和bw对应底层的persistConn和persistConnWriter,一个是reader,一个是writer,

Dialer

  1. Timeout:获取conn的超时时间,与Request的ctx取较小超时时间。一般TCP的超时一般是3分钟

  2. DialContext

    • 先使用Resolver进行域名解析

    • 多个地址,每个连接的超时时间是平分的,通过partialDeadline实现

    • TCP实现dialTCP

    • UDP实现dialUDP

    • IP实现dialIP

    • socket连接超时使用的ctx

    • Keepalive参数:keepalive通过系统调用,将句柄设置keepalive的超时时间。keepalive开启分为

      两步

      • 通过系统调用将句柄的SO_KEEPALIVE字段设置为true
      • 通过系统调用设置超时时间,设置TCP_KEEPINTVl字段和TCP_KEEPIDLE字段,TCP_KEEPINTVl默认为15,linux系统为75,TCP_KEEPIDLE默认为15s
      • 涉及字段为KeepAlive、tcp_keepalive_time、tcp_keepalive_intvl、tcp_keepalive_probes
        • KeepAlive:是否开启keepalive这一功能选项
        • tcp_keepalive_time:tcp可以保持的空闲时间,即发送一次探针成功后,可以保证这个TCP这么长的时间是活的
        • tcp_keepalive_intvl:探针发送的周期
        • tcp_keepalive_probes:如果tcp_keepalive_time这么久没有收到探针,则再发送tcp_keepalive_time次数探活测试包包,如果都失败,则表明这个TCP连接已经挂了

Resolver

  1. lookupIPAddr:获取IP地址数组
  2. parseIPZone直接解析ip地址,不走dns
  3. 实际调用的函数为lookupIP
  4. PreferGo默认为false,实际最后都是调用goLookupIPCNAMEOrder,两种方式直接获取的order的不太一样
    • prefergo
      • true:只从systemConf里面获取Oder
      • false:先从systemConf里面获取Oder,如果为hostLoopupCgo,则Cgo的方式获取
    • 读取/etc/nsswitch.conf、/etc/resolv.conf和/etc/mdns.allow
    • order有下面几种类型
      • hostLookupCgo
      • hostLoopupFilesDNS
      • hostLoopupDNSFiles
      • hostLoopupFiles
      • hostLoopupDNS
    • goLoopupIPCNAMEOrder
    • 域名最大长度255
    • 可以通过配置resolv.conf的useTCP强制使用TCP,否则先通过udp获取,获取不到再使用tcp
    • dns的超时时间默认为5s,如果在resolv.conf配置了,使用配置中的
    • 调用远端的dailer也是Dialer

TLS

  1. persistConn.addTLS:添加tls
  2. 握手
    • clientHandshake
    • serverHandshake

学习文章

  1. keepalive
  2. 理解TCP长连接(Keepalive)
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:11:44  更:2022-02-26 12:14:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:51:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码