亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Golang > 正文

golang中為什么Response.Body需要被關閉詳解

2020-04-01 18:53:47
字體:
來源:轉載
供稿:網友

前言

本文主要介紹了關于golang中Response.Body需要被關閉的相關內容,文中通過示例代碼介紹的非常詳細,對各位學習或者使用golang具有一定參考學習價值,下面話不多說了,來一起看看詳細的介紹吧

Body io.ReadCloser

The http Client and Transport guarantee that Body is always non-nil, even on 
responses without a body or responses with a zero-length body. It is the caller's 
responsibility to close Body. The default HTTP client's Transport does not attempt to 
reuse HTTP/1.0 or HTTP/1.1 TCP connections ("keep-alive") unless the Body is read to 
completion and is closed.

http客戶端(Client)和傳輸(Transport)保證響應體總是非空的,即使響應沒有響應體或0長響應
體。關閉響應體是調用者的責任。默認http客戶端傳輸(Transport)不會嘗試復用keep-alive的
http/1.0、http/1.1連接,除非請求體已被完全讀出而且被關閉了。

以上是http包文檔說明。但是為什么body需要被關閉呢,不關閉會如何?那就讀源碼唄。

要了解body,首先要了解http事務是如何處理的。http事務是交由底層的Transport處理的。

第一步是從連接池獲取一個連接,這個連接的功能由3個goroutine協同實現,一個主goroutine,一個readLoop,一個writeLoop,后兩個goroutine生命周期和連接一致。雖說readLoop和writeLoop名字叫循環(也確實是for循環),但實際上一次循環就完整處理一個http事務,循環本身僅僅是為了連接復用,所以為了便于理解其邏輯可以忽略它的循環結構。

接下來三個goroutine協同完成http事務:

  • 主goroutine將request同時發給readLoop和writeLoop。
  • writeLoop發送request,然后將狀態(error)發送給主goroutine和readLoop。
  • readLoop解析頭部response,然后將狀態(error)和response發送給主goroutine。
  • 主goroutine返回用戶代碼,readLoop等待body讀取完成。
  • readLoop回收連接。

了解http事務的處理流程,然后我們回過頭來看看神秘的body到底是什么

//源碼版本1.8.3// src/net/http/transfer.go:405 body解析方法func readTransfer(msg interface{}, r *bufio.Reader) (err error)// src/net/http/transfer.go:485 解析chunkedt.Body = &body{src: internal.NewChunkedReader(r), hdr: msg, r: r, closing: t.Close}// src/net/http/transfer.go:490 產生eoft.Body = &body{src: io.LimitReader(r, realLength), closing: t.Close}// src/net/http/transport.go:1560 發送eof信號body := &bodyEOFSignal{// src/net/http/transport.go:1583 gzip解碼resp.Body = &gzipReader{body: body}

body實際上是一個嵌套了多層的net.TCPConn:

  • bufio.Reader,這層嘗試將多次小的讀操作替換為一次大的讀操作,減少系統調用的次數,提高性能;
  • io.LimitedReader,tcp連接在讀取完body后不會關閉,繼續讀會導致阻塞,所以需要LimitedReader在body讀完后發出eof終止讀??;
  • chunkedReader,解析chunked格式編碼(如果不是chunked略過);
  • bodyEOFSignal,在讀到eof,或者是提前關閉body時會對readLoop發出回收連接的通知;
  • gzipReader,解析gzip壓縮(如果不是gizp壓縮略過);

從上面可以看出如果body既沒有被完全讀取,也沒有被關閉,那么這次http事務就沒有完成,除非連接因超時終止了,否則相關資源無法被回收。

如果請求頭或響應頭指明Connection: close呢?還是無法回收,因為close表示在http事務完成后斷開連接,而事務尚未完成自然不會斷開,更不會回收。

從實現上看只要body被讀完,連接就能被回收,只有需要拋棄body時才需要close,似乎不關閉也可以。但那些正常情況能讀完的body,即第一種情況,在出現錯誤時就不會被讀完,即轉為第二種情況。而分情況處理則增加了維護者的心智負擔,所以始終close body是最佳選擇。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人av资源在线播放| 国内精品国产三级国产在线专| 欧美中文在线免费| 亚洲欧美国产精品专区久久| 亚洲免费影视第一页| 成人欧美一区二区三区黑人| 国产成人精品电影| 91亚洲国产成人久久精品网站| 国产视频精品va久久久久久| 国产在线98福利播放视频| 欧美成人sm免费视频| 黄色91在线观看| 97视频在线看| 精品中文字幕久久久久久| 欧美电影院免费观看| 午夜精品久久久久久99热| 久久精品在线播放| 国产综合在线观看视频| 黑人巨大精品欧美一区二区一视频| 尤物99国产成人精品视频| 亚洲自拍偷拍网址| 亚洲第一区中文99精品| 国产亚洲在线播放| 亚洲xxxx在线| 国产精品青草久久久久福利99| 在线电影中文日韩| 成人国产亚洲精品a区天堂华泰| 97久久伊人激情网| 亚洲国产精品va| 国产乱肥老妇国产一区二| 欧美影院在线播放| 久久黄色av网站| 九九综合九九综合| 少妇av一区二区三区| 欧美激情精品在线| 成人激情电影一区二区| 国产成人亚洲综合| 国产视频精品xxxx| 欧美怡红院视频一区二区三区| 欧美成人免费一级人片100| 日韩精品中文字幕视频在线| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精选中文字幕| 日韩美女免费线视频| 久热99视频在线观看| 日韩中文字在线| 欧美乱人伦中文字幕在线| 国产精品免费网站| 亚洲成人国产精品| 久久亚洲欧美日韩精品专区| 欧美最近摘花xxxx摘花| 欧美性在线视频| 欧美大学生性色视频| 国产精品免费观看在线| 中文字幕免费国产精品| 精品无人区乱码1区2区3区在线| 欧美日本啪啪无遮挡网站| 萌白酱国产一区二区| 日韩电影中文字幕| 国产欧美日韩高清| 亚洲国产成人久久综合一区| 日本91av在线播放| 国产福利精品av综合导导航| 国产午夜精品一区二区三区| 国产精品一区二区三区在线播放| 91亚洲国产精品| 欧洲精品久久久| 色偷偷88888欧美精品久久久| 2018中文字幕一区二区三区| 国产视频亚洲精品| 国产精品久久久久久中文字| 亚洲视频欧美视频| 成人黄色片在线| 久久精品国产亚洲一区二区| 色婷婷亚洲mv天堂mv在影片| 亚洲精品久久久一区二区三区| 久久精品国产亚洲精品| 夜色77av精品影院| 国产美女被下药99| 久久精品欧美视频| 日韩经典第一页| 欧美猛交ⅹxxx乱大交视频| 在线免费观看羞羞视频一区二区| 欧美黑人一级爽快片淫片高清| 91国产一区在线| 在线一区二区日韩| 一色桃子一区二区| 九九综合九九综合| www.日韩不卡电影av| 久久久久久com| 日本成熟性欧美| 欧美猛交ⅹxxx乱大交视频| 欧美美女操人视频| 精品欧美激情精品一区| 亚洲高清久久久久久| 国产精品精品一区二区三区午夜版| 92国产精品视频| 国产成人精品在线观看| 国产日韩精品综合网站| 久久精品国产成人| 国产成人精品日本亚洲专区61| 亚洲精选一区二区| 久久成人在线视频| 欧美成人h版在线观看| 日韩成人在线电影网| 中文字幕一精品亚洲无线一区| 人人澡人人澡人人看欧美| 精品国产乱码久久久久久婷婷| 91精品久久久久久久久久久久久久| 精品国产乱码久久久久久虫虫漫画| 国产精品视频久久| 久久精品99久久香蕉国产色戒| 欧美激情一区二区三区在线视频观看| 欧美激情videos| 国外视频精品毛片| 免费97视频在线精品国自产拍| 久久久极品av| 91sa在线看| 日韩中文字幕av| 欧美亚洲视频在线观看| 久久亚洲电影天堂| 欧美老少配视频| 亚洲国产精品va在线观看黑人| 日本19禁啪啪免费观看www| 欧美在线亚洲一区| 欧美性xxxxxxx| 日韩激情av在线免费观看| 亚洲国产成人在线播放| 日韩国产精品视频| 国产精品999999| 亚洲精品久久久一区二区三区| 26uuu久久噜噜噜噜| 久久婷婷国产麻豆91天堂| 欧美午夜精品久久久久久浪潮| 欧美成人免费全部| 这里只有视频精品| 国产成人综合一区二区三区| 国产精品香蕉国产| 国产99视频在线观看| 欧美黄色片在线观看| 欧美日韩一区二区三区在线免费观看| 在线播放精品一区二区三区| 亚洲精品久久久久久久久| 国产成人aa精品一区在线播放| 欧美色视频日本高清在线观看| 91久久久精品| 色综合伊人色综合网站| 欧美成人精品在线播放| 国产日韩欧美在线看| 国产精品久久激情| 欧美黑人狂野猛交老妇| 最近更新的2019中文字幕| 久久香蕉国产线看观看av| 性视频1819p久久| 久久久精品视频成人| 91精品国产高清久久久久久91| 亚洲欧美在线播放| 91九色单男在线观看| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产成人一区二区三区| 日本亚洲欧美成人| 久久91亚洲精品中文字幕| 欧美中文在线视频| 日韩精品在线观看一区|