長(cháng)連接與短(duǎn)連接
所謂長(cháng)連接,指在一(yī)個(gα&↕φè)TCP連接上(shàng)可(kě)以連續發送多(duō)個(gè✔♦Ωα)數(shù)據包,在TCP連接保持期間(jiān)£λ<✔,如(rú)果沒有(yǒu)數(shù)據包發送,需要(yà♠Ωo)雙方發檢測包以維持此連接,一(yī)般需'™要(yào)自(zì)己做(zuò)在線維持。
短(duǎn)連接是(shì)指通(tō∏®φ&ng)信雙方有(yǒu)數(shù)據交互時(shí)™↕δ,就(jiù)建立一(yī)個(gè)TCP連接,數(shù)據發送完成後,則£≤₹斷開(kāi)此TCP連接,一(yī)般銀(β₩ γyín)行(xíng)都(dōu)使用(yòng)短(duǎn)連接。 &→>₩nbsp;
比如(rú)http的(de),隻是(shì)連接、請(qǐng)求♠∞•、關閉,過程時(shí)間(jiān)較短(duǎn),服務器(qì)✔若是(shì)一(yī)段時(shí)間♣¥ ©(jiān)內(nèi)沒有(yǒu)收到(dào&↕₽≠)請(qǐng)求即可(kě)關閉連接。
其實長(cháng)連接是(shì)相(xiàng)對γ÷(duì)于通(tōng)常的(de)短≈∏♥♥(duǎn)連接而說(shuō)的(de),σ₽也(yě)就(jiù)是(shì)長(cháng)時(÷' shí)間(jiān)保持客戶端與服務端的(de)連接狀态。
長(cháng)連接與短(duǎn)連接的(de)操作(z≈λ×αuò)過程
通(tōng)常的(de)短(duǎn)連接操作(zuò)步驟是(s∏σhì):
連接→數(shù)據傳輸→關閉連接;
而長(cháng)連接通(tōng)常就(jiù)是(β♥ shì):
連接→數(shù)據傳輸→保持連接(心跳(tiào)≈↑®)→數(shù)據傳輸→保持連接(心跳(tiào))&rβ×$arr;……&rarrδ ₽;關閉連接;
這(zhè)就(jiù)要(yào)求長(cháng&↕)連接在沒有(yǒu)數(shù)據通(tōng∏↓)信時(shí),定時(shí)發送數(s↓✔≈hù)據包(心跳(tiào)),以維持連接狀态,短(→↕♥duǎn)連接在沒有(yǒu)數(shù)據傳輸時(shí)直接關閉就(jiù→ )行(xíng)了(le)
什(shén)麽時(shí)候用(yòn∞©g)長(cháng)連接,短(duǎn)連接?
長(cháng)連接多(duō)用(yò®©♥ng)于操作(zuò)頻(pín)繁,點對(duì)點的(de)通(tōng∑ )訊,而且連接數(shù)不(bù)能(néng)太多(duō)情況,。每個<≠γΩ(gè)TCP連接都(dōu)需要(yào)三步握手,這(zhè)需要(yàπ♦o)時(shí)間(jiān),如(rú)₽←果每個(gè)操作(zuò)都(dōu)是(shì)先連接,再操作♥Ω↔(zuò)的(de)話(huà)那(nà)麽處理(lǐ)速度會(h>∑$αuì)降低(dī)很(hěn)多(duō),所以每個(gè)操作₩ (zuò)完後都(dōu)不(bù)斷開(kāi),次處理(∑₽εlǐ)時(shí)直接發送數(shù)據包就(jiù)OK了(l∞↕e),不(bù)用(yòng)建立TCP連接。γ©例如(rú):數(shù)據庫的(de)連接用(yòng)長(ch←♦₽áng)連接, 如(rú)果用(yòng)短(duǎn)連接頻(pí'×★n)繁的(de)通(tōng)信會(huì)造成socket錯(cuò)誤αλ™,而且頻(pín)繁的(de)socket 創建也(yě)是(λ$shì)對(duì)資源的(de)浪費(fèi)。
發送接收方式
1、異步
報(bào)文(wén)發送和(hé)接收是(shì)分(fēn<)開(kāi)的(de),相(xiàng)互獨立的(de),互不(bù)影(y≤→®ǐng)響。這(zhè)種方式又(yòu)分(fēn)兩種情₩ ≈況:
(1)異步雙工(gōng):接收和(hé)發送在同一(yī)個©÷×(gè)程序中,由兩個(gè)不(bù)同的(de)子(zǐ)進程分(↓♣fēn)别負責發送和(hé)接收
(2)異步單工(gōng):接收和(hé)發送是(sh∑★♠ì)用(yòng)兩個(gè)不(bù)同的(de)程序來(lái)完成。∏♣"
2、同步
報(bào)文(wén)發送和(hé)接收是(shìλα)同步進行(xíng),既報(bào)文(wén)發送™★後等待接收返回報(bào)文(wén)。 同步方式一(yī)般需要(yà↔←☆♠o)考慮超時(shí)問(wèn)題,即報(bà↕÷∞"o)文(wén)發出去(qù)後不(bù)能(néng)無限等♦♠α待,需要(yào)設定超時(shí)時(shí♠σ)間(jiān),超過該時(shí)間(jiān)發送方÷不(bù)再等待讀(dú)返回報(bào)文(wén),直接↔'通(tōng)知(zhī)超時(shí)返回。
在長(cháng)連接中一(yī)般是(shì)沒有(yǒu★&♠)條件(jiàn)能(néng)夠判斷讀(dú)寫什←&<(shén)麽時(shí)候結束,所以必須要(yào)加長(chánΩ♦ g)度報(bào)文(wén)頭。讀(dú)函數(shù)先是(s©∑hì)讀(dú)取報(bào)文(wén)頭的(d™↓₽e)長(cháng)度,再根據這(zhè)←↕個(gè)長(cháng)度去(qù)讀(dú)σ®相(xiàng)應長(cháng)度的(de)₩¶報(bào)文(wén)。
單工(gōng)、半雙工(gōng)和(hé)全雙工(g∏✔σōng)
根據通(tōng)信雙方的(de)分(fēn)工(gōng)和(h↔♣∏é)信号傳輸方向可(kě)将通(tōng)信分(fēn)£≥為(wèi)三種方式:單工(gōng)、半雙工(g↔★λōng)與全雙工(gōng)。在計(jì)算(suàn)機(jī)網絡φ§σ∏中主要(yào)采用(yòng)雙工(g←&∏±ōng)方式,其中:局域網采用(yòng)半雙工('σ•£gōng)方式,城(chéng)域網和(hé)廣域網采用(y∑←òng)全雙年(nián)方式。 ∑∏ 1. 單工(gōng)(Simplex)方式:•$∞$通(tōng)信雙方設備中發送器(qì)與接收器(qì)分(fēn)工(gō↓↕δng)明(míng)确,隻能(néng)在由發送器(qì)向接收器(≈≥↔<qì)的(de)單一(yī)固定方向上(shàng)傳送數(shù§§≠)據。采用(yòng)單工(gōng)通(tōng®•¶π)信的(de)典型發送設備如(rú)早期計(jìγ↕)算(suàn)機(jī)的(de)讀(dú)卡器(qì),典¥ 型的(de)接收設備如(rú)打印機(jī)。 2. 半雙÷工(gōng)(Half Duplex)方式:通(tōng)>₹"±信雙方設備既是(shì)發送器(qì),也(yě)是(∏★shì)接收器(qì),兩台設備可(kě)以相(xiàng)互ε₽±傳送數(shù)據,但(dàn)某一(yī)時(shí)刻則隻能(né÷ ₹ng)向一(yī)個(gè)方向傳送數(shù¶÷)據。例如(rú),步話(huà)機(jī)是(shì)半雙工(gōng)設備¶ε,因為(wèi)在一(yī)個(gè)時(s✔γhí)刻隻能(néng)有(yǒu)一(yī)方↑ 說(shuō)話(huà)。 3. 全雙工↑↔λ§(gōng)(Full Duplex)方式:通(← tōng)信雙方設備既是(shì)發送器(qì),也(yě)是(shì)接收λ←器(qì),兩台設備可(kě)以同時(shí)在兩個(gè)方向上(©©®shàng)傳送數(shù)據。例如(rú),電(di∏±♦àn)話(huà)是(shì)全雙工(gōng)設備,因為(wè>φi)雙方可(kě)同時(shí)說(shuō)話(huà)。
而像WEB網站(zhàn)的(de)http服務一(σ≤∏yī)般都(dōu)用(yòng)短(dΩΩβ¶uǎn)鏈接,因為(wèi)長(chán≥≥≤↓g)連接對(duì)于服務端來(lái)說( ≤Ω÷shuō)會(huì)耗費(fèi)一(yī)定的(de)資源,•☆而像WEB網站(zhàn)這(zhè)麽頻(pín♥ ₹←)繁的(de)成千上(shàng)萬甚至上(shà≤∑ng)億客戶端的(de)連接用(yòng)短(duǎn)連接≈✘會(huì)更省一(yī)些(xiē)資源,如(rú)果用(yòngφ↑€)長(cháng)連接,而且同時(shí)有(yǒu)成千上(shàn ¶↔g)萬的(de)用(yòng)戶,如(rú)果每個(gè)用×§•™(yòng)戶都(dōu)占用(yòng)一(yī)個♥∑'γ(gè)連接的(de)話(huà),那(nà)可(kě)想而知(zhī)吧(₹ ₽ba)。所以并發量大(dà),但(dàn→✘)每個(gè)用(yòng)戶無需頻(pín)繁操作(zuò)情況下™δπ(xià)需用(yòng)短(duǎn)連好♠¶ε(hǎo)。
總之,長(cháng)連接和(hé)短(duǎn)連®£≥接的(de)選擇要(yào)視(shì)情況而定。