1 回答

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
我想知道第一次調(diào)用 w.Write() 是否刷新到客戶端?
net/http
的默認(rèn)值ResonseWriter
在net.Conn
它寫(xiě)入的內(nèi)容上有一個(gè)(當(dāng)前為 4KB)大的輸出緩沖區(qū)。此外,操作系統(tǒng)通常會(huì)緩沖對(duì)套接字的寫(xiě)入。所以在大多數(shù)情況下會(huì)發(fā)生某種緩沖。
如果它被刷新,那么我們實(shí)際上對(duì)客戶端響應(yīng)了兩次,這很奇怪,因?yàn)槲覀內(nèi)绾卧诘诙握{(diào)用 write 之前確定 Content-Length?
好吧,HTTP 1.1 允許持久連接。此類(lèi)響應(yīng)通常不包含Content-Length
標(biāo)題。此外,還有 HTTP 預(yù)告片。
如果您的客戶端不支持 HTTP 1.1 和持久連接,它們將有某種讀取超時(shí),在此期間您可以根據(jù)需要多次寫(xiě)入連接;這是一種回應(yīng)。
與 Go 相比,這更多地與 TCP 套接字和 HTTP 實(shí)現(xiàn)的性質(zhì)有關(guān)。
如果它沒(méi)有被刷新(比如數(shù)據(jù)在本地緩沖),那么如果我們?cè)诘谝淮握{(diào)用時(shí)寫(xiě)入大量數(shù)據(jù)怎么辦?(那個(gè)堆棧會(huì)溢出嗎?)
不,在堆棧上分配緩沖區(qū)是沒(méi)有意義的——緩沖區(qū)的主體將存在于堆中。如果您達(dá)到每個(gè)進(jìn)程的內(nèi)存限制,您的應(yīng)用程序?qū)⒊霈F(xiàn)“內(nèi)存不足”的恐慌。
- 1 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)