天天看點

長連接配接與短連接配接的差別(tcp socket http概念原理是一樣的)

一、長連接配接與短連接配接:

長連接配接:client方與server方先建立連接配接,連接配接建立後不斷開,然後再進行封包發送和接收。這種方式下由于通訊連接配接一直存在。此種方式常用于P2P通信。

短連接配接:Client方與server每進行一次封包收發交易時才進行通訊連接配接,交易完畢後立即斷開連接配接。此方式常用于一點對多點通訊。C/S通信。

二、長連接配接與短連接配接的操作過程:

短連接配接的操作步驟是:建立連接配接——資料傳輸——關閉連接配接...建立連接配接——資料傳輸——關閉連接配接

長連接配接的操作步驟是:建立連接配接——資料傳輸...(保持連接配接)...資料傳輸——關閉連接配接

三、長連接配接與短連接配接的使用時機:

長連接配接:短連接配接多用于操作頻繁,點對點的通訊,而且連接配接數不能太多的情況。每個TCP連接配接的建立都需要三次握手,每個TCP連接配接的斷開要四次握手。如果每次操作都要建立連接配接然後再操作的話處理速度會降低,是以每次操作下次操作時直接發送資料就可以了,不用再建立TCP連接配接。例如:資料庫的連接配接用長連接配接,如果用短連接配接頻繁的通信會造成socket錯誤,頻繁的socket建立也是對資源的浪費。

短連接配接:web網站的http服務一般都用短連接配接。因為長連接配接對于伺服器來說要耗費一定的資源。像web網站這麼頻繁的成千上萬甚至上億用戶端的連接配接用短連接配接更省一些資源。試想如果都用長連接配接,而且同時用成千上萬的使用者,每個使用者都占有一個連接配接的話,可想而知伺服器的壓力有多大。是以并發量大,但是每個使用者又不需頻繁操作的情況下需要短連接配接。

總之:長連接配接和短連接配接的選擇要視需求而定。

四、發送接收方式:

1、異步:封包發送和接收是分開的,互相獨立,互不影響的。這種方式又分兩種情況:異步雙工:接收和發送在同一個程式中,有兩個不同的子程序分别負責發送和接送。異步單工:接送和發送使用兩個不同的程式來完成。2、同步:封包發送和接收是同步進行,即封包發送後等待接送傳回封包。同步方式一般需要考慮逾時問題,試想我們發送封包以後也不能無限等待啊,是以我們要設定一個等待時候。超過等待時間發送方不再等待讀傳回封包。直接通知逾時傳回。

五、封包格式:通信封包格式多樣性更多,相應地就必須設計對應的讀寫封包的接收和發送封包函數。

阻塞與非阻塞方式1、非阻塞方式:讀函數不停的進行讀動作,如果沒有封包接收到,等待一段時間後逾時傳回,這種情況一般需要指定逾時時間。2、阻塞方式:如果沒有接收到封包,則讀函數一直處于等待狀态,知道封包到達。

循環讀寫方式1、一次直接讀寫封包:在一次接收或發送封包動作中一次性不加分别地全部讀取或全部發送封包位元組。2、不指定長度循環讀寫:這一版發生在短連接配接程序中,受網絡路由等限制,一次較長的封包可能在網絡傳輸過程中被分解成很多個包,一次讀取可能不能全部讀完一次封包,這就需要循環讀取封包,知道讀完為止。3、帶長度封包頭循環讀寫:這種情況一般在長連接配接中,由于在長連接配接中沒有條件能夠判斷循環讀寫什麼時候結束。必須要加長度封包頭。讀函數先是讀取封包頭的長度,再根據這個長度去讀封包,實際情況中,報頭碼制格式還經常不一樣,如果是非ASCII的封包頭,還必須轉換成ASCII常見的封包頭編制有:1、n個位元組的ASCII碼。2、n個位元組的BCD碼。3、n個位元組的網絡整型碼。

以上是幾種比較典型的讀寫封包方式,可以與通信方式模闆一起 預先提供一些典型的API讀寫函數。

當然在實際問題中,可能還必須編寫與對方封包格式配套的讀寫API. 在實際情況中,往往需要

把我們自己的系統與别人的系統進行連接配接, 有了以上模闆與API,可以說連接配接任何方式的通信程式

都不存在問題。