什么是“長連接”和“短連接”? 解釋1 所謂長連接指建立SOCKET連接后不管是否使用都保持連接,但安全性較差; 所謂短連接指建立SOCKET連接后發(fā)送后接收完數(shù)據(jù)后馬上斷開連接,一般銀行都使用短連接
解釋2 長連接就是指在基于tcp的通訊中,一直保持連接,不管當(dāng)前是否發(fā)送或者接收數(shù)據(jù)。 而短連接就是只有在有數(shù)據(jù)傳輸?shù)臅r候才進(jìn)行連接,客戶-服務(wù)器通信/傳輸數(shù)據(jù)完畢就關(guān)閉連接。
解釋3 長連接和短連接這個概念好像只有移動的CMPP協(xié)議中提到了,其他的地方?jīng)]有看到過。
解釋4 短連接:比如http的,只是連接、請求、關(guān)閉,過程時間較短,服務(wù)器若是一段時間內(nèi)沒有收到請求即可關(guān)閉連接。
HTTP協(xié)議之長、短連接 一、長連接與短連接:長連接:client方與server方先建立連接,連接建立后不斷開,然后再進(jìn)行報文發(fā)送和接收。 這種方式下由于通訊連接一直存在。此種方式常用于P2P通信。 短連接:Client方與server每進(jìn)行一次報文收發(fā)交易時才進(jìn)行通訊連接,交易完畢后立即斷開連接。 此方式常用于一點(diǎn)對多點(diǎn)通訊。C/S通信。 二、長連接與短連接的操作過程:短連接的操作步驟是: 建立連接——數(shù)據(jù)傳輸——關(guān)閉連接...建立連接——數(shù)據(jù)傳輸——關(guān)閉連接 長連接的操作步驟是: 建立連接——數(shù)據(jù)傳輸...(保持連接)...數(shù)據(jù)傳輸——關(guān)閉連接 三、長連接與短連接的使用時機(jī):長連接:短連接多用于操作頻繁,點(diǎn)對點(diǎn)的通訊,而且連接數(shù)不能太多的情況。 每個TCP連接的建立都需要三次握手,每個TCP連接的斷開要四次握手。 如果每次操作都要建立連接然后再操作的話處理速度會降低,所以每次操作后,下次操作時直接發(fā)送數(shù)據(jù)就可以了,不用再建立TCP連接。例如:數(shù)據(jù)庫的連接用長連接,如果用短連接頻繁的通信會造成socket錯誤,頻繁的socket創(chuàng)建也是對資源的浪費(fèi)。 短連接:web網(wǎng)站的http服務(wù)一般都用短連接。因?yàn)殚L連接對于服務(wù)器來說要耗費(fèi)一定的資源。像web網(wǎng)站這么頻繁的成千上萬甚至上億客戶端的連接用短連接更省一些資源。試想如果都用長連接,而且同時用成千上萬的用戶,每個用戶都占有一個連接的話,可想而知服務(wù)器的壓力有多大。所以并發(fā)量大,但是每個用戶又不需頻繁操作的情況下需要短連接。總之:長連接和短連接的選擇要根據(jù)需求而定。 四、發(fā)送接收方式:1、異步:報文發(fā)送和接收是分開的,相互獨(dú)立,互不影響的。這種方式又分兩種情況: 異步雙工:接收和發(fā)送在同一個程序中,有兩個不同的子進(jìn)程分別負(fù)責(zé)發(fā)送和接送。 異步單工:接送和發(fā)送使用兩個不同的程序來完成。 2、同步:報文發(fā)送和接收是同步進(jìn)行,即報文發(fā)送后等待接送返回報文。同步方式一般需要考慮超時問題,試想我們發(fā)送報文以后也不能無限等待啊,所以我們要設(shè)定一個等待 時候。超過等待時間發(fā)送方不再等待讀返回報文。直接通知超時返回。 五、報文格式:通信報文格式多樣性更多,相應(yīng)地就必須設(shè)計對應(yīng)的讀寫報文的接收和發(fā)送報文函數(shù)。 阻塞與非阻塞方式1、非阻塞方式:讀函數(shù)不停的進(jìn)行讀動作,如果沒有報文接收到,等待一段時間后超時返回,這種情況一般需要指定超時時間。 2、阻塞方式:如果沒有接收到報文,則讀函數(shù)一直處于等待狀態(tài),知道報文到達(dá)。 循環(huán)讀寫方式1、一次直接讀寫報文:在一次接收或發(fā)送報文動作中一次性不加分別地全部讀取或全部發(fā)送報文字節(jié)。 2、不指定長度循環(huán)讀寫:這一版發(fā)生在短連接進(jìn)程中,受網(wǎng)絡(luò)路由等限制,一次較長的報文可能在網(wǎng)絡(luò)傳輸過程中被分解成很多個包,一次讀取可能不能全部讀完一次報文,這就需要循環(huán)讀取報文,直到讀完為止。 3、帶長度報文頭循環(huán)讀寫:這種情況一般在長連接中,由于在長連接中沒有條件能夠判斷循環(huán)讀寫什么時候結(jié)束。必須要加長度報文頭。讀函數(shù)先是讀取報文頭的長度,再根據(jù)這個長度去讀報文,實(shí)際情況中,報頭碼制格式還經(jīng)常不一樣,如果是非ASCII的報文頭,還必須轉(zhuǎn)換成ASCII常見的報文頭編制有: 1、n個字節(jié)的ASCII碼。 2、n個字節(jié)的BCD碼。 3、n個字節(jié)的網(wǎng)絡(luò)整型碼。 以上是幾種比較典型的讀寫報文方式,可以與通信方式模板一起預(yù)先提供一些典型的API讀寫函數(shù)。當(dāng)然在實(shí)際問題中,可能還必須編寫與對方報文格式配套的讀寫API. 在實(shí)際情況中,往往需要把我們自己的系統(tǒng)與別人的系統(tǒng)進(jìn)行連接, 有了以上模板與API,可以說連接任何方式的通信程序都不存在問題。 |
|
來自: vavava > 《Protocol》