java的技術(shù)分析

1:心跳機制

1.1心跳包機制

? 跳包之所以叫心跳包是因為:它像心跳一樣每隔固定時間發(fā)一次捺疼,以此來告訴服務(wù)器总珠,這個客戶端還活著蚤假。事實上這是為了保持長連接,至于這個包的內(nèi)容吊说,是沒有什么特別規(guī)定的论咏,不過一般都是很小的包,或者只包含包頭的一個空包颁井。

? 在TCP的機制里面厅贪,本身是存在有心跳包的機制的,也就是TCP的選項:SO_KEEPALIVE蚤蔓。系統(tǒng)默認(rèn)是設(shè)置的2小時的心跳頻率卦溢。但是它檢查不到機器斷電糊余、網(wǎng)線拔出秀又、防火墻這些斷線。而且邏輯層處理斷線可能也不是那么好處理贬芥。一般吐辙,如果只是用于保活還是可以的蘸劈。

? 心跳包一般來說都是在邏輯層發(fā)送空的echo包來實現(xiàn)的昏苏。下一個定時器,在一定時間間隔下發(fā)送一個空包給客戶端威沫,然后客戶端反饋一個同樣的空包回來贤惯,服務(wù)器如果在一定時間內(nèi)收不到客戶端發(fā)送過來的反饋包,那就只有認(rèn)定說掉線了棒掠。

? 其實孵构,要判定掉線,只需要send或者recv一下烟很,如果結(jié)果為零颈墅,則為掉線。但是雾袱,在長連接下恤筛,有可能很長一段時間都沒有數(shù)據(jù)往來。理論上說芹橡,這個連接是一直保持連接的毒坛,但是實際情況中,如果中間節(jié)點出現(xiàn)什么故障是難以知道的。更要命的是煎殷,有的節(jié)點(防火墻)會自動把一定時間之內(nèi)沒有數(shù)據(jù)交互的連接給斷掉屡谐。在這個時候,就需要我們的心跳包了蝌数,用于維持長連接愕掏,保活顶伞。

? 在獲知了斷線之后饵撑,服務(wù)器邏輯可能需要做一些事情,比如斷線后的數(shù)據(jù)清理呀唆貌,重新連接呀……當(dāng)然滑潘,這個自然是要由邏輯層根據(jù)需求去做了。

? 總的來說锨咙,心跳包主要也就是用于長連接的庇锫保活和斷線處理。一般的應(yīng)用下酪刀,判定時間在30-40秒比較不錯粹舵。如果實在要求高,那就在6-9秒

1.2心跳檢測步驟

1客戶端每隔一個時間間隔發(fā)生一個探測包給服務(wù)器

2客戶端發(fā)包時啟動一個超時定時器

3服務(wù)器端接收到檢測包骂倘,應(yīng)該回應(yīng)一個包

4如果客戶機收到服務(wù)器的應(yīng)答包眼滤,則說明服務(wù)器正常,刪除超時定時器

5如果客戶端的超時定時器超時历涝,依然沒有收到應(yīng)答包诅需,則說明服務(wù)器掛了

1.3 輪詢機制 vs 心跳機制

輪詢:概括來說是服務(wù)端定時主動的去與要監(jiān)控狀態(tài)的客戶端(或者叫其他系統(tǒng))通信,詢問當(dāng)前的某種狀態(tài)荧库,客戶端返回狀態(tài)信息堰塌,客戶端沒有返回或返回錯誤、失效信息分衫、則認(rèn)為客戶端已經(jīng)宕機场刑,然后服務(wù)端自己內(nèi)部把這個客戶端的狀態(tài)保存下來(宕機或者其他),如果客戶端正常丐箩,那么返回正常狀態(tài)摇邦,如果客戶端宕機或者返回的是定義的失效狀態(tài)那么當(dāng)前的客戶端狀態(tài)是能夠及時的監(jiān)控到的,如果客戶端宕機之后重啟了那么當(dāng)服務(wù)端定時來輪詢的時候屎勘,還是可以正常的獲取返回信息施籍,把其狀態(tài)重新更新。

心跳:最終得到的結(jié)果是與輪詢一樣的但是實現(xiàn)的方式有差別概漱,心跳不是服務(wù)端主動去發(fā)信息檢測客戶端狀態(tài)丑慎,而是在服務(wù)端保存下來所有客戶端的狀態(tài)信息,然后等待客戶端定時來訪問服務(wù)端,更新自己的當(dāng)前狀態(tài)竿裂,如果客戶端超過指定的時間沒有來更新狀態(tài)玉吁,則認(rèn)為客戶端已經(jīng)宕機或者其狀態(tài)異常。

心跳機制與輪詢的比較腻异,在我們的應(yīng)用中进副,采用的是心跳,這樣一是避免服務(wù)端的壓力悔常,二是靈活好控制影斑,上一篇文章中提到過,我們的外網(wǎng)服務(wù)端(服務(wù)端)不知道內(nèi)網(wǎng)服務(wù)端(客戶端)的地址机打,有雖然有保存客戶端的socket會話矫户,但是客戶端宕機會話就失效了。所以只能等著他主動來報告狀態(tài)残邀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末皆辽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子芥挣,更是在濱河造成了極大的恐慌驱闷,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九秀,死亡現(xiàn)場離奇詭異遗嗽,居然都是意外死亡,警方通過查閱死者的電腦和手機鼓蜒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來征字,“玉大人都弹,你說我怎么就攤上這事〕捉” “怎么了畅厢?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵鹃愤,是天一觀的道長茎辐。 經(jīng)常有香客問我,道長踱蠢,這世上最難降的妖魔是什么袖肥? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任咪辱,我火速辦了婚禮,結(jié)果婚禮上椎组,老公的妹妹穿的比我還像新娘油狂。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布专筷。 她就那樣靜靜地躺著弱贼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪磷蛹。 梳的紋絲不亂的頭發(fā)上吮旅,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機與錄音味咳,去河邊找鬼鸟辅。 笑死,一個胖子當(dāng)著我的面吹牛莺葫,可吹牛的內(nèi)容都是我干的匪凉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捺檬,長吁一口氣:“原來是場噩夢啊……” “哼再层!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堡纬,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤聂受,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后烤镐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛋济,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年炮叶,在試婚紗的時候發(fā)現(xiàn)自己被綠了碗旅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡镜悉,死狀恐怖祟辟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侣肄,我是刑警寧澤旧困,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站稼锅,受9級特大地震影響吼具,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矩距,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一拗盒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剩晴,春花似錦锣咒、人聲如沸侵状。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趣兄。三九已至,卻和暖如春悼嫉,著一層夾襖步出監(jiān)牢的瞬間艇潭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工戏蔑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹋凝,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓总棵,卻偏偏與公主長得像鳍寂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子情龄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容