tcp長(zhǎng)連接和短連接
TCP在真正的讀寫操作之前,server與client之間必須建立一個(gè)連接肯尺,
當(dāng)讀寫操作完成后啥供,雙方不再需要這個(gè)連接時(shí)它們可以釋放這個(gè)連接,
連接的建立通過(guò)三次握手薄翅,釋放則需要四次握手,
所以說(shuō)每個(gè)連接的建立都是需要資源消耗和時(shí)間消耗的氓奈。
?TCP短連接
模擬一種TCP短連接的情況:
client 向 server 發(fā)起連接請(qǐng)求
server 接到請(qǐng)求翘魄,雙方建立連接
client 向 server 發(fā)送消息
server 回應(yīng) client
一次讀寫完成,此時(shí)雙方任何一個(gè)都可以發(fā)起 close 操作
在步驟5中探颈,一般都是 client 先發(fā)起 close 操作熟丸。當(dāng)然也不排除有特殊的情況。
從上面的描述看伪节,短連接一般只會(huì)在 client/server 間傳遞一次讀寫操作光羞!
TCP長(zhǎng)連接
再模擬一種長(zhǎng)連接的情況:
client 向 server 發(fā)起連接
server 接到請(qǐng)求,雙方建立連接
client 向 server 發(fā)送消息
server 回應(yīng) client
一次讀寫完成怀大,連接不關(guān)閉
后續(xù)讀寫操作...
長(zhǎng)時(shí)間操作之后client發(fā)起關(guān)閉請(qǐng)求
短連接的操作步驟是:
建立連接——數(shù)據(jù)傳輸——關(guān)閉連接...建立連接——數(shù)據(jù)傳輸——關(guān)閉連接
長(zhǎng)連接的操作步驟是:
建立連接——數(shù)據(jù)傳輸...(保持連接)...數(shù)據(jù)傳輸——關(guān)閉連接
TCP長(zhǎng)/短連接的優(yōu)點(diǎn)和缺點(diǎn)
長(zhǎng)連接可以省去較多的TCP建立和關(guān)閉的操作纱兑,減少浪費(fèi),節(jié)約時(shí)間化借。
對(duì)于頻繁請(qǐng)求資源的客戶來(lái)說(shuō)潜慎,較適用長(zhǎng)連接。
client與server之間的連接如果一直不關(guān)閉的話蓖康,會(huì)存在一個(gè)問(wèn)題铐炫,
隨著客戶端連接越來(lái)越多,server早晚有扛不住的時(shí)候蒜焊,這時(shí)候server端需要采取一些策略倒信,
如關(guān)閉一些長(zhǎng)時(shí)間沒(méi)有讀寫事件發(fā)生的連接,這樣可以避免一些惡意連接導(dǎo)致server端服務(wù)受損泳梆;
如果條件再允許就可以以客戶端機(jī)器為顆粒度鳖悠,限制每個(gè)客戶端的最大長(zhǎng)連接數(shù),
這樣可以完全避免某個(gè)蛋疼的客戶端連累后端服務(wù)优妙。
短連接對(duì)于服務(wù)器來(lái)說(shuō)管理較為簡(jiǎn)單乘综,存在的連接都是有用的連接,不需要額外的控制手段套硼。
但如果客戶請(qǐng)求頻繁卡辰,將在TCP的建立和關(guān)閉操作上浪費(fèi)時(shí)間和帶寬。
單進(jìn)程服務(wù)器-epoll(有一個(gè)特殊的內(nèi)存,共享內(nèi)存看政,用事件通知朴恳。效率高)
IO 多路復(fù)用
就是我們說(shuō)的select,poll允蚣,epoll,有些地方也稱這種IO方式為event driven IO呆贿。
select/epoll的好處就在于單個(gè)process就可以同時(shí)處理多個(gè)網(wǎng)絡(luò)連接的IO嚷兔。
它的基本原理就是select,poll做入,epoll這個(gè)function會(huì)不斷的輪詢所負(fù)責(zé)的所有socket冒晰,當(dāng)某個(gè)socket有數(shù)據(jù)到達(dá)了,就通知用戶進(jìn)程竟块。
IO體現(xiàn)
1.減少?gòu)?fù)制的過(guò)程
2.事件通知