1. 程式人生 > 其它 >20 HTTP 長連線與短連線

20 HTTP 長連線與短連線

20 HTTP 長連線與短連線

每日一句

紙上得來終覺淺,絕知此事要躬行。

每日一句

Never give up until the fight is over.
永遠不要放棄,要一直戰鬥到最後一秒。

概念

長連線
指在一個TCP連線上可以連續傳送多個數據包。
在TCP連線保持期間,如果沒有資料包傳送,需要雙方發檢測包以維持此連線,一般需要自己做線上維持。

短連線
指通訊雙方有資料互動時,就建立一個TCP連線,資料傳送完成後,則斷開此TCP連線。

HTTP的長連線和短連線本質上是TCP長連線和短連線。
HTTP屬於應用層協議,在傳輸層使用TCP協議,在網路層使用IP協議。
IP協議主要解決網路路由和定址問題,TCP協議主要解決如何在IP層之上可靠的傳遞資料包。

從HTTP/1.1起,預設使用長連線,用以保持連線特性。使用長連線的HTTP協議,會在響應頭有加入這行程式碼:Connection:keep-alive

連線過程

短連線操作步驟是:
連線→資料傳輸→關閉連線;

長連線通常就是:
連線→資料傳輸→保持連線(心跳)→資料傳輸→保持連線(心跳)→……→關閉連線

使用場景

長連線:
多用於操作頻繁,點對點的通訊,而且連線數不能太多情況.
如資料庫連線

短連線
web網站的http服務。長連線更加耗費伺服器資源。bulabula..

美文佳句

把握分寸,是一種難得的智慧。那些能看到別人優點的人,往往懂得把別人放在心上,時刻照顧別人的感受。他們會在一言一語中放低自己的姿態,讓別人感受到關心和尊重。

人與人之間,不過一場以心換心。學會欣賞別人,別人才會欣賞你。對他人適時地讚美,不需要多麼高超的說話技巧,比技巧更重要的是真誠。真心實意、以誠相待,永遠是人際交往中最基本的準則。

面試題

HashMap、ConcurrentHashMap 和Hashtable有什麼區別?

HashMap ConcurrentHashMap Hashtable
執行緒是否安全,以及實現執行緒安全的方式 HashMap不安全 執行緒安全,ConcurrentHashMap
JDK1.7底層採用分段鎖,對整個桶數進行了分割分段(segment),
每一把鎖只鎖容器其中一部分資料,提高併發訪問率。
JDK 1.8 底層採用 Node陣列 + 連結串列 + 紅黑樹的結構實現,
併發控制使用了 synchronized 和 CAS 操作。
執行緒安全,底層採用synchronized 來保證執行緒安全,
直接是方法級別的加鎖, ConcurrentHashMap 雖然也是 synchronized
但它是對連結串列或者紅黑樹的頭節點進行加鎖,鎖的粒度更小
底層工作原理 底層採用的是 陣列 + 連結串列 ConcurrentHashMap
JDK 1.7 底層採用 分段的陣列 + 連結串列實現。
JDK 1.8 採用的是 陣列 + 連結串列/紅黑樹
底層採用的是 陣列 + 連結串列
空值問題 HashMap允許使用null值(key和value)都可以。
但是這樣的鍵只有一個,可以有一個或多個鍵所對應的值為null
HashTable不允許null值(key和value都不可以)
初始容量、擴容與預設負載因子 HashMap 預設初始大小 16,每次擴容 2n,預設負載因子是0。75 HashTable 預設初始大小為11,每次擴容 2n+1

你都知道哪些常用的Map集合?

HashMap、HashTable、TreeMap、LinkedHashMap、ConcurrentHashMap

@RequestMapping 註解有什麼用?

@RequestMapping 註解,用於將特定 HTTP 請求方法對映到將處理相應請求的控制器中的特定類/方法。此註釋可應用於兩個級別:

  • 類級別:對映請求的 URL。
  • 方法級別:對映 URL 以及 HTTP 請求方法。

你好,我是yltrcc,日常分享技術點滴,歡迎關注我:ylcoder