亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Keepalive機(jī)制

Keepalive機(jī)制 時(shí)間:2018-09-29      來(lái)源:未知

1. TCP保活的必要性

1) 很多防火墻等對(duì)于空閑socket自動(dòng)關(guān)閉

2) 對(duì)于非正常斷開(kāi), 服務(wù)器并不能檢測(cè)到. 為了回收資源, 必須提供一種檢測(cè)機(jī)制.

 

2. 導(dǎo)致TCP斷連的因素

如果網(wǎng)絡(luò)正常, socket也通過(guò)close操作來(lái)進(jìn)行優(yōu)雅的關(guān)閉, 那么一切完美. 可是有很多情況, 比如網(wǎng)線(xiàn)故障, 客戶(hù)端一側(cè)突然斷電或者崩潰等等, 這些情況server并不能正常檢測(cè)到連接的斷開(kāi). 

 

3. 保活的兩種方式:

1) 應(yīng)用層面的心跳機(jī)制

自定義心跳消息頭. 一般客戶(hù)端主動(dòng)發(fā)送, 服務(wù)器接收后進(jìn)行回應(yīng)(也可以不回應(yīng)). 這里不進(jìn)行詳述.

PS: 有人從軟件的功能角度列出第三種方式, 就是通過(guò)第三方軟件來(lái)進(jìn)行探測(cè), 確定連接的有效性. 這種方式局限性很大, 而且不屬于軟件內(nèi)部的功能實(shí)現(xiàn). 不進(jìn)行討論.

2) TCP協(xié)議自帶的保活功能

打開(kāi)keep-alive功能即可. 具體屬性也可以通過(guò)API設(shè)定.

 

4. 兩種方式的優(yōu)劣性

TCP協(xié)議自帶的保活功能, 使用起來(lái)簡(jiǎn)單, 減少了應(yīng)用層代碼的復(fù)雜度. 推測(cè)也會(huì)更節(jié)省流量, 因?yàn)橐话銇?lái)說(shuō)應(yīng)用層的數(shù)據(jù)傳輸?shù)絽f(xié)議層時(shí)都會(huì)被加上額外的包頭包尾. 由TCP協(xié)議提供的檢活, 其發(fā)的探測(cè)包, 理論上實(shí)現(xiàn)的會(huì)更精妙(用更少的字節(jié)完成更多的目標(biāo)), 耗費(fèi)更少的流量.

由應(yīng)用自己實(shí)現(xiàn)的應(yīng)用層的心跳, 為心跳消息額外定義一個(gè)消息類(lèi)型就可以了. 就是應(yīng)用正常的消息包, 只是這個(gè)包特殊點(diǎn), 專(zhuān)門(mén)用來(lái)檢活而已, 通常比較小, 可能只有消息頭就可以了, 除非需要額外的信息. 

應(yīng)用層心跳的好處我個(gè)人的理解有兩點(diǎn): 

一是比較靈活, 因?yàn)閰f(xié)議層的心跳只能提供純粹的檢活功能, 但是應(yīng)用層自己可以隨意控制, 包括協(xié)議可能提供的是秒級(jí)的, 但是你想做成毫秒級(jí)的都任意(雖然實(shí)際幾乎不會(huì)有這種時(shí)間級(jí)別的心跳), 包里還甚至可以攜帶額外的信息, 這些都是靈活之處.

二是通用, 應(yīng)用層的心跳不依賴(lài)協(xié)議. 如果有一天不用TCP要改為UDP了, 協(xié)議層不提供心跳機(jī)制了, 但是你應(yīng)用層的心跳依舊是通用的, 可能只需要做少許改動(dòng)就可以繼續(xù)使用.

應(yīng)用層心跳的不好的地方也很顯而易見(jiàn), 增加開(kāi)發(fā)工作量, 由于應(yīng)用特定的網(wǎng)絡(luò)框架, 還可能很增加代碼結(jié)構(gòu)的復(fù)雜度. 再就是根據(jù)上面的推測(cè), 應(yīng)用層心跳的流量消耗還是更大的, 畢竟這本質(zhì)上還是個(gè)普通的數(shù)據(jù)包.

 

5. 到底選用那種心跳方式?

優(yōu)劣點(diǎn)第4節(jié)已經(jīng)進(jìn)行了闡述, 因此如果能確定你們更換協(xié)議的可能性非常小, 同時(shí)只是需要檢活的功能, 那么用協(xié)議自帶的就絕對(duì)OK了, 使用簡(jiǎn)單而且高效. 有些自負(fù)的人總喜歡用自己搞的, 來(lái)代替成熟協(xié)議自帶的東西, 代替系統(tǒng)內(nèi)核提供的東西, 其實(shí)往往你應(yīng)用層實(shí)現(xiàn)的東西, 都是更拙劣的. 網(wǎng)上看了一些關(guān)于協(xié)議的Keep-alive不靠譜的說(shuō)法, 也都比較空想和想當(dāng)然, 都沒(méi)有拿出任何事實(shí)論據(jù)或?qū)嶒?yàn)數(shù)據(jù). 這點(diǎn)大家有見(jiàn)解, 歡迎交流哈~

 

6. 類(lèi)Unix平臺(tái)如何使用Keep-alive

keepalive默認(rèn)是關(guān)閉的, 因?yàn)殡m然流量極小, 畢竟是開(kāi)銷(xiāo). 因此需要用戶(hù)手動(dòng)開(kāi)啟. 有兩種方式開(kāi)啟.

1) 在代碼里針對(duì)每個(gè)socket進(jìn)行單獨(dú)設(shè)定, 使用起來(lái)靈活.

除了keepAlive 開(kāi)關(guān), 還有keepIdle, keepInterval, keepCount 3個(gè)屬性, 使用簡(jiǎn)單, 如下:

 

int keepAlive = 1;   // 開(kāi)啟keepalive屬性. 缺省值: 0(關(guān)閉)  

int keepIdle = 60;   // 如果在60秒內(nèi)沒(méi)有任何數(shù)據(jù)交互,則進(jìn)行探測(cè). 缺省值:7200(s)  

int keepInterval = 5;   // 探測(cè)時(shí)發(fā)探測(cè)包的時(shí)間間隔為5秒. 缺省值:75(s)  

int keepCount = 2;   // 探測(cè)重試的次數(shù). 全部超時(shí)則認(rèn)定連接失效..缺省值:9(次)  

setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (void*)&keepAlive, sizeof(keepAlive));  

setsockopt(s, SOL_TCP, TCP_KEEPIDLE, (void*)&keepIdle, sizeof(keepIdle));  

setsockopt(s, SOL_TCP, TCP_KEEPINTVL, (void*)&keepInterval, sizeof(keepInterval));  

setsockopt(s, SOL_TCP, TCP_KEEPCNT, (void*)&keepCount, sizeof(keepCount));  

 

2) 修改配置文件, 對(duì)整個(gè)系統(tǒng)所有的socket有效.

我們可以用cat命令查看到系統(tǒng)中這幾個(gè)默認(rèn)的值.

#cat /proc/sys/net/ipv4/tcp_keepalive_time  7200  

#cat /proc/sys/net/ipv4/tcp_keepalive_intvl  75  

#cat /proc/sys/net/ipv4/tcp_keepalive_probes  9

修改它們:

#echo 60 > /proc/sys/net/ipv4/tcp_keepalive_time  

#echo 5 > /proc/sys/net/ipv4/tcp_keepalive_intvl  

#echo 3 > /proc/sys/net/ipv4/tcp_keepalive_probes

上一篇:嵌入式指針數(shù)組

下一篇:如何在C中動(dòng)態(tài)分配二維數(shù)組

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線(xiàn):010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線(xiàn):010-82525379 院校合作洽談專(zhuān)線(xiàn):010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 日本高清视频网站 | 国产人妖ts在线视频播放 | 欧美最猛性xxxx69交 | 99re这里只有精品在线观看 | 亚洲高清国产品国语在线观看 | 日本亚洲精品成人 | 欧美在线性爱视频 | 精品欧美一区二区三区 | 99精品免费在线观看 | 波多野结衣视频一区 | 韩国午夜aaa三级三级 | 日本六九视频 | 久操视频免费看 | 漂亮的保姆免费观看 | 两个人的视频www免费 | 日本一区二区三区在线 视频 | 午夜一区二区免费视频 | 人人干天天干 | 国产一国产一级毛片视频在线 | 波多野结衣手机视频一区 | 春色视频一区二区三区 | 国内福利写真片视频在线观看 | 日韩去日本高清在线 | 久久99精品波多结衣一区 | 欧美亚洲国产日韩一区二区三区 | 成人自拍视频在线观看 | 色天天综合久久久久综合片 | 人人揉揉 | 午夜视频在线观看完整高清在线 | 欧美性色黄 | 亚洲第一成人在线 | 国产欧美一区二区 | 国产日韩欧美亚洲综合在线 | 国产精品久久久久久久久久一区 | 国产精品久久久久9999高清 | 欧美高清免费 | 亚洲精品视频久久 | 久久人人澡人人爽人人爱 | 九九视频这里只有精品 | 国产亚洲精品俞拍视频 | 欧美视频不卡一区二区三区 |