JAVA長連線與短連線

2021-08-20 23:29:18 字數 1319 閱讀 4934

最近在使用極光推送,聽用過的同事講了句:使用長連線,心跳機制等知識點,很是熟悉,但是又不能明確的說出其中的不同,所以這裡總結下。

長連線,指在乙個連線上可以連續傳送多個資料報,在連線保持期間,如果沒有資料報傳送,需要雙方發鏈路檢測包。

短連線是指通訊雙方有資料互動時,就建立乙個連線,資料傳送完成後,則斷開此連線,即每次連線只完成一項業務的傳送。

2、資料庫連線、jpush、mq都是長連線

長連線多用於操作頻繁,點對點的通訊,而且連線數不能太多情況。每個tcp連線都需要三步握手,這需要時間,如果每個操作都是短連線,再操作的話那麼處理速度會降低很多,所以每個操作完後都不斷開,下次處理時直接傳送資料報就ok了,不用建立tcp連線。例如:資料庫的連線用長連線,如果用短連線頻繁的通訊會造成socket錯誤,而且頻繁的socket 建立也是對資源的浪費。

而像web**的http服務一般都用短鏈結,因為長連線對於服務端來說會耗費一定的資源,而像web**這麼頻繁的成千上萬甚至上億客戶端的連線用短連線會更省一些資源,如果用長連線,而且同時有成千上萬的使用者,如果每個使用者都占用乙個連線的話,那可想而知吧。所以併發量大,但每個使用者無需頻繁操作情況下需用短連好。

總之,長連線和短連線的選擇要視情況而定。

補充知識[tcp三次握手]

第一次握手:建立連線時,客戶端傳送syn包(syn=j)到伺服器,並進入syn_sent狀態,等待伺服器確認;syn:同步序列編號(synchronize sequence numbers)。

第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=j+1),同時自己也傳送乙個syn包(syn=k),即syn+ack包,此時伺服器進入syn_recv狀態;

第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=k+1),此包傳送完畢,客戶端和伺服器進入established(tcp連線成功)狀態,完成三次握手。

完成三次握手,客戶端與伺服器開始傳送資料,在上述過程中,還有一些重要的概念:

通俗例子:洋洋給俊俊送東西

第一次:洋洋說:「俊俊,你在家嗎?」

第二次:俊俊說:「我在家的,你是洋洋嗎?」

第三次:洋洋說:「俊俊,我是洋洋。」

然後俊俊開門,洋洋把東西給俊俊了。

輪詢

輪詢是基站為終端分配頻寬的一種處理流程,這種分配可以是針對單個終端或是一組終端的。為單個終端和一組終端連線分配頻寬,實際上是定義頻寬請求競爭機制,這種分配不是使用乙個單獨的訊息,而是上行鏈路對映訊息中包含的一系列分配機制。

JAVA長連線與短連線

長連線,指在乙個連線上可以連續傳送多個資料報,在連線保持期間,如果沒有資料報傳送,需要雙方發鏈路檢測包。短連線是指通訊雙方有資料互動時,就建立乙個連線,資料傳送完成後,則斷開此連線,即每次連線只完成一項業務的傳送。2 資料庫連線 jpush mq都是長連線 長連線多用於操作頻繁,點對點的通訊,而且連...

長連線與短連線

通常短連線是這樣 連線 傳輸資料 關閉連線 那什麼是長連線?一般長連線相對短連線而言的,長連線在傳輸完數後不關閉連線,而不斷的傳送包保持連線等待處理下乙個資料報。such as 連線 傳輸資料 保持連線 傳輸資料 關閉連線。那什麼時候用短連線呢?一般長連線用於少數client end to serv...

長連線與短連線

短連線是指通訊雙方有資料互動時,就建立乙個tcp連線,資料傳送完成後,則斷開此tcp連線,一般銀行都使用短連線。比如http的,只是連線 請求 關閉,過程時間較短,伺服器若是一段時間內沒有收到請求即可關閉連線。其實長連線是相對於通常的短連線而說的,也就是長時間保持客戶端與服務端的連線狀態。通常的短連...