国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

字節一面:HTTP長連接和TCP長連接有區別?

小林coding ? 來源:小林coding ? 作者:小林coding ? 2022-12-02 14:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

大家好,我是小林。

之前有位讀者私信我,他在字節面試時,被問到這兩個問題:

第一個問題:MySQL 的 NULL 值是怎么存放的?

第二個問題:HTTP 長連接和 TCP 長連接有什么區別?

第一個問題,主要是考核你是否清楚 MySQL 一條記錄是怎么存儲的,我在前幾天已經寫了一篇文章講解了,還沒看過的同學,可以去看這篇:字節一面:MySQL 的 NULL 值是怎么存放的?

第二問題,其實是在問 HTTP 的 Keep-Alive 和 TCP 的 Keepalive 有什么區別?

這是個好問題,應該有不少人都會搞混,因為這兩個東西看上去太像了,很容易誤以為是同一個東西。

如果認真讀過我網站上圖解網絡系列文章的同學,應該這個問題你們都會,因為我之前就寫過。

不過,應該也有不少同學,看過后忘記了,這次就帶大家重新復習一波。

事實上,這兩個完全是兩樣不同東西,實現的層面也不同:

HTTP 的 Keep-Alive,是由應用層(用戶態)實現的,稱為 HTTP 長連接;

TCP 的 Keepalive,是由TCP 層(內核態)實現的,稱為 TCP 保活機制;

接下來,分別說說它們。

HTTP 的 Keep-Alive

HTTP 協議采用的是「請求-應答」的模式,也就是客戶端發起了請求,服務端才會返回響應,一來一回這樣子。

3e26a8d2-7205-11ed-8abf-dac502259ad0.png

請求-應答

由于 HTTP 是基于 TCP 傳輸協議實現的,客戶端與服務端要進行 HTTP 通信前,需要先建立 TCP 連接,然后客戶端發送 HTTP 請求,服務端收到后就返回響應,至此「請求-應答」的模式就完成了,隨后就會釋放 TCP 連接。

3e32a4fc-7205-11ed-8abf-dac502259ad0.png

一個 HTTP 請求

如果每次請求都要經歷這樣的過程:建立 TCP -> 請求資源 -> 響應資源 -> 釋放連接,那么此方式就是HTTP 短連接,如下圖:

3e48c390-7205-11ed-8abf-dac502259ad0.png

HTTP 短連接

這樣實在太累人了,一次連接只能請求一次資源。

能不能在第一個 HTTP 請求完后,先不斷開 TCP 連接,讓后續的 HTTP 請求繼續使用此連接?

當然可以,HTTP 的 Keep-Alive 就是實現了這個功能,可以使用同一個 TCP 連接來發送和接收多個 HTTP 請求/應答,避免了連接建立和釋放的開銷,這個方法稱為HTTP 長連接。

3e70a324-7205-11ed-8abf-dac502259ad0.png

HTTP 長連接

HTTP 長連接的特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態。

怎么才能使用 HTTP 的 Keep-Alive 功能?

在 HTTP 1.0 中默認是關閉的,如果瀏覽器要開啟 Keep-Alive,它必須在請求的包頭中添加:

Connection:Keep-Alive

然后當服務器收到請求,作出回應的時候,它也添加一個頭在響應中:

Connection:Keep-Alive

這樣做,連接就不會中斷,而是保持連接。當客戶端發送另一個請求時,它會使用同一個連接。這一直繼續到客戶端或服務器端提出斷開連接。

從 HTTP 1.1 開始, 就默認是開啟了 Keep-Alive,如果要關閉 Keep-Alive,需要在 HTTP 請求的包頭里添加:

Connection:close

現在大多數瀏覽器都默認是使用 HTTP/1.1,所以 Keep-Alive 都是默認打開的。一旦客戶端和服務端達成協議,那么長連接就建立好了。

HTTP 長連接不僅僅減少了 TCP 連接資源的開銷,而且這給HTTP 流水線技術提供了可實現的基礎。

所謂的 HTTP 流水線,是客戶端可以先一次性發送多個請求,而在發送過程中不需先等待服務器的回應,可以減少整體的響應時間。

舉例來說,客戶端需要請求兩個資源。以前的做法是,在同一個 TCP 連接里面,先發送 A 請求,然后等待服務器做出回應,收到后再發出 B 請求。HTTP 流水線機制則允許客戶端同時發出 A 請求和 B 請求。

3e8df00a-7205-11ed-8abf-dac502259ad0.png

右邊為 HTTP 流水線機制

但是服務器還是按照順序響應,先回應 A 請求,完成后再回應 B 請求。

而且要等服務器響應完客戶端第一批發送的請求后,客戶端才能發出下一批的請求,也就說如果服務器響應的過程發生了阻塞,那么客戶端就無法發出下一批的請求,此時就造成了「隊頭阻塞」的問題。

可能有的同學會問,如果使用了 HTTP 長連接,如果客戶端完成一個 HTTP 請求后,就不再發起新的請求,此時這個 TCP 連接一直占用著不是挺浪費資源的嗎?

對沒錯,所以為了避免資源浪費的情況,web 服務軟件一般都會提供 keepalive_timeout 參數,用來指定 HTTP 長連接的超時時間。

比如設置了 HTTP 長連接的超時時間是 60 秒,web 服務軟件就會啟動一個定時器,如果客戶端在完后一個 HTTP 請求后,在 60 秒內都沒有再發起新的請求,定時器的時間一到,就會觸發回調函數來釋放該連接。

3eb55dac-7205-11ed-8abf-dac502259ad0.png

HTTP 長連接超時

TCP 的 Keepalive

TCP 的 Keepalive 這東西其實就是TCP 的保活機制,它的工作原理我之前的文章寫過,這里就直接貼下以前的內容。

如果兩端的 TCP 連接一直沒有數據交互,達到了觸發 TCP 保活機制的條件,那么內核里的 TCP 協議棧就會發送探測報文。

如果對端程序是正常工作的。當 TCP 保活的探測報文發送給對端, 對端會正常響應,這樣TCP 保活時間會被重置,等待下一個 TCP 保活時間的到來。

如果對端主機崩潰,或對端由于其他原因導致報文不可達。當 TCP 保活的探測報文發送給對端后,石沉大海,沒有響應,連續幾次,達到保活探測次數后,TCP 會報告該 TCP 連接已經死亡。

所以,TCP 保活機制可以在雙方沒有數據交互的情況,通過探測報文,來確定對方的 TCP 連接是否存活,這個工作是在內核完成的。

3ed5f9d6-7205-11ed-8abf-dac502259ad0.png

TCP 保活機制

注意,應用程序若想使用 TCP 保活機制需要通過 socket 接口設置 SO_KEEPALIVE 選項才能夠生效,如果沒有設置,那么就無法使用 TCP 保活機制。

總結

HTTP 的 Keep-Alive 也叫 HTTP 長連接,該功能是由「應用程序」實現的,可以使得用同一個 TCP 連接來發送和接收多個 HTTP 請求/應答,減少了 HTTP 短連接帶來的多次 TCP 連接建立和釋放的開銷。

TCP 的 Keepalive 也叫 TCP 保活機制,該功能是由「內核」實現的,當客戶端和服務端長達一定時間沒有進行數據交互時,內核為了確保該連接是否還有效,就會發送探測報文,來檢測對方是否還在線,然后來決定是否要關閉該連接。

歷史好文:

字節一面:TCP 三次握手,問的好細!

美團二面:TCP 四次揮手,可以變成三次嗎?

字節一面:服務端掛了,客戶端的 TCP 連接還在嗎?

字節一面:HTTPS 一定安全可靠嗎?

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • HTTP
    +關注

    關注

    0

    文章

    537

    瀏覽量

    35350
  • TCP
    TCP
    +關注

    關注

    8

    文章

    1424

    瀏覽量

    83503
  • MySQL
    +關注

    關注

    1

    文章

    906

    瀏覽量

    29518
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    晶科技董事楊國江發表2026年新春賀詞

    歲啟新章,駿程納福。在這辭舊迎新的美好時刻,我謹代表晶科技經營管理團隊,向勤勞奮斗的晶家人,向全球風雨同行的合作伙伴,以及所有關注、支持晶的各界朋友們,致以最誠摯的新年問候和美好祝福
    的頭像 發表于 02-26 15:11 ?377次閱讀

    niobeu4 esp32 開發板無法連接有密碼的wifi

    密碼的熱點,無法連接有密碼的熱點。 (3)使用 esp-idf 原生的 api 開發 wifi(系統環境是 openharmony,只更換 api),結果也是只能連接沒有密碼的熱點,無法連接帶密碼的熱點。 問題復現: 使用例程中
    發表于 01-23 10:36

    晶科技重啟IPO

    據證監會官網的信息顯示,江蘇晶科技股份有限公司于2026年1月15日正式啟動上市輔導,華泰聯合證券有限責任公司擔任輔導機構。這意味著晶科技重啟IPO,此前在2022年9月份,晶科技就啟動過創業板IPO;但是在2023年9月
    的頭像 發表于 01-16 11:13 ?468次閱讀

    請問CW32仿真器連接有什么特殊要求嗎?

    CW32仿真器連接有什么特殊要求嗎?
    發表于 01-12 07:56

    TCP和UDP的區別

    首先概括下基本的區別: TCP個面向連接的、可靠的、基于字節流的傳輸層協議。 而UDP
    發表于 12-09 07:24

    為什么會有TCP/IP協議?

    ,計算機只是單兵作戰并不會發揮太大的作用。 只有把它們聯合起來,電腦才會發揮出它最大的潛力。于是人們就想方設法的用電線把電腦連接到了起。 但是簡單的連到起是遠遠不夠的,就好像語言不同的兩個人互相見了
    發表于 12-03 06:28

    全流程場景落地 在線測儀多方位部署 滿足各種檢測需求

    在鋼廠,不同的位置都有長度的檢測需求,如剪切位置、鋼坯位置、成品位置等,在不同的位置部署在線測儀,保證測量精度,提升產品品質。 全流程場景落地:這些環節“吃勁”,管控效果明顯 在線測儀在鋼鐵生產
    發表于 11-04 14:23

    什邡離線掃描設備如何測量材直線度

    、每米等多種直線度誤差和外徑。 1、基本原理 兩組測頭可組成個坐標系,通過每個測頭測量的被測物中心位置可計算出被測物中心在坐標系中的坐標位置 離線掃描式直線度測量儀是種專為材(如管材、棒材、線材等
    發表于 09-05 14:05

    「案例分享」飛創行程直線模組的高效與精準應用

    工業自動化進程的核心力量。飛創行程直線模組案例飛創超高速?行程直線電機模組展現出卓越的性能與精巧的設計。該模組總長9500mm,有效行程可達9m,在緊湊的結構中(寬
    的頭像 發表于 08-26 11:37 ?492次閱讀
    「案例分享」飛創<b class='flag-5'>長</b>行程直線模組的高效與精準應用

    Modbus TCP連接多個客戶端解決方法-深圳市振鑫通信科技

    ZP-MBS008多主站模塊是實現Modbus-TCP連接多個客戶端或者服務器通訊設備
    的頭像 發表于 06-25 11:07 ?1718次閱讀
    Modbus <b class='flag-5'>TCP</b><b class='flag-5'>連接</b>多個客戶端解決方法-深圳市振鑫通信科技

    開疆智能Profient轉ModbusTCP網關連接ABB機器人MODBUS TCP通訊案例

    使用網線即可,但是網線連接的是機器人控制器的“X5”網口中。 案例: 1. ABB機器人現在要讀取調試工具中的保持寄存器的值,從第6字節開始讀取
    的頭像 發表于 05-22 16:51 ?827次閱讀
    開疆智能Profient轉ModbusTCP網關<b class='flag-5'>連接</b>ABB機器人MODBUS <b class='flag-5'>TCP</b>通訊案例

    網絡光纖線可以接嗎?

    網絡光纖線可以接,但接長過程需要專業的設備、技術和操作規范,且接后可能會對光纖傳輸性能產生定影響。以下是關于網絡光纖線接的詳細說明: 接長方法 光纖熔接 原理:使用光纖熔接機,
    的頭像 發表于 05-07 10:42 ?1693次閱讀

    連接鍵插拔#連接器 #防水連接器 #工業級連接器 #IPX9K連接

    連接
    深圳市凌科電氣有限公司
    發布于 :2025年03月21日 10:43:04

    連接個夢想

    電子連接
    通天電子科技(東莞市)有限公司
    發布于 :2025年03月18日 19:10:39

    請問為什么模型加載時間比CPU

    為什么模型加載時間比 CPU
    發表于 03-06 06:03