1. 程式人生 > >JAVA長連線與短連線

JAVA長連線與短連線

https://blog.csdn.net/sinat_29970905/article/details/80808765

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

1、開發的大多數網站action請求資料都是短連線:

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

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連線成功)狀態,完成三次握手。

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

通俗例子:洋洋給俊俊送東西
第一次:洋洋說:“俊俊,你在家嗎?”
第二次:俊俊說:“我在家的,你是洋洋嗎?”
第三次:洋洋說:“俊俊,我是洋洋。”
然後俊俊開門,洋洋把東西給俊俊了。

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