本發(fā)明屬于通信技術(shù)領(lǐng)域,特別涉及一種檢測(cè)客戶端與服務(wù)器之間連接狀態(tài)的方法。
背景技術(shù):
在cs架構(gòu)的程序中,服務(wù)器主要提供數(shù)據(jù)管理、數(shù)據(jù)共享、數(shù)據(jù)以及系統(tǒng)維護(hù)和并發(fā)控制客戶端。客戶端需要針對(duì)用戶具體的業(yè)務(wù)與服務(wù)器建立連接,在客戶端與服務(wù)器連接前或者連接中,如果連接中斷的話將導(dǎo)致業(yè)務(wù)處理失敗,造成資源的浪費(fèi),更嚴(yán)重者可能導(dǎo)致客戶端阻塞崩潰。
針對(duì)上述情況,常用的方式是客戶端定時(shí)向服務(wù)器發(fā)送心跳幀,以確認(rèn)客戶端是否與服務(wù)器保持連接,然而,定時(shí)發(fā)送心跳幀會(huì)出現(xiàn)一個(gè)問(wèn)題,例如客戶端每隔20秒向服務(wù)器發(fā)送一次心跳幀確保在線,如果在確認(rèn)連接后斷開(kāi)了連接,這將造成客戶端有一個(gè)20秒的錯(cuò)誤狀態(tài)(客戶端認(rèn)為在線,但實(shí)際已經(jīng)斷線),需要等待20秒后狀態(tài)才能正確。在這個(gè)階段用戶如果操作客戶端,很容易因?yàn)闋顟B(tài)不對(duì)造成阻塞或者崩潰的問(wèn)題。
如果將心跳幀的發(fā)送間隔縮短,例如由20秒發(fā)送修改為5秒發(fā)送,則頻繁的發(fā)送容易造成資源的競(jìng)爭(zhēng)和浪費(fèi),增加系統(tǒng)出錯(cuò)的概率。
如果將心跳幀的發(fā)送時(shí)間延長(zhǎng),則狀態(tài)的更新延時(shí)更加嚴(yán)重。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的,在于提供一種客戶端與服務(wù)器連接狀態(tài)的檢測(cè)方法,其可在減少資源浪費(fèi)與消除連接延時(shí)之間達(dá)成平衡。
為了達(dá)成上述目的,本發(fā)明的解決方案是:
一種客戶端與服務(wù)器連接狀態(tài)的檢測(cè)方法,判斷客戶端的狀態(tài)屬性是否處于空閑狀態(tài),若客戶端處于空閑狀態(tài),則定時(shí)發(fā)送心跳幀;若客戶端與服務(wù)器正在數(shù)據(jù)交互中,則即時(shí)發(fā)送心跳幀。
上述定時(shí)發(fā)送心跳幀的具體內(nèi)容是:客戶端定時(shí)向服務(wù)器發(fā)送心跳幀,并判斷是否在指定時(shí)間內(nèi)收到服務(wù)器反饋的消息回復(fù),若收到,則表示客戶端與服務(wù)器連接正常;若未收到,則客戶端等待設(shè)定時(shí)間后向服務(wù)器重新發(fā)送心跳幀。
上述客戶端等待設(shè)定時(shí)間后向服務(wù)器重新發(fā)送心跳幀,客戶端在指定時(shí)間內(nèi)收到服務(wù)器的消息回復(fù),則表示客戶端與服務(wù)器連接正常,等待下一次定時(shí)發(fā)送心跳幀;若客戶端在指定時(shí)間內(nèi)未收到服務(wù)器的消息回復(fù),則判定客戶端和服務(wù)器連接中斷,再定時(shí)自動(dòng)重連服務(wù)器。
上述客戶端與服務(wù)器正在數(shù)據(jù)交互中,則即時(shí)發(fā)送心跳幀的具體內(nèi)容是:若客戶端與服務(wù)器正在數(shù)據(jù)交互中,則客戶端實(shí)時(shí)向服務(wù)器發(fā)送心跳幀,并判斷是否在指定時(shí)間內(nèi)收到服務(wù)器反饋的消息回復(fù),若收到,則表示客戶端與服務(wù)器通信正常,然后開(kāi)始客戶端與服務(wù)器的數(shù)據(jù)交互;若未收到,則客戶端等待設(shè)定時(shí)間后向服務(wù)器重新發(fā)送心跳幀。
上述客戶端等待設(shè)定時(shí)間后向服務(wù)器重新發(fā)送心跳幀,客戶端在指定時(shí)間內(nèi)收到服務(wù)器的消息回復(fù),則表示客戶端與服務(wù)器連接正常,等待下一次定時(shí)發(fā)送心跳幀;若客戶端在指定時(shí)間內(nèi)未收到服務(wù)器的消息回復(fù),則判定客戶端和服務(wù)器連接中斷,再定時(shí)自動(dòng)重連服務(wù)器。
采用上述方案后,本發(fā)明在客戶端空閑階段定時(shí)發(fā)送心跳幀,而在需要交互時(shí)即時(shí)發(fā)送心跳幀,這樣,在空閑階段能夠節(jié)省資源,而需要交互時(shí)則能夠消除連接延時(shí),防止因?yàn)檠訒r(shí)而導(dǎo)致的服務(wù)器和客戶端獲取狀態(tài)不一致的情況。本發(fā)明消除了心跳幀定時(shí)發(fā)送導(dǎo)致的延時(shí)問(wèn)題,解決頻繁發(fā)送心跳幀導(dǎo)致資源的浪費(fèi)和競(jìng)爭(zhēng),在功能上能夠減少資源浪費(fèi)和消除延時(shí)平衡,不需要為了哪個(gè)功能犧牲另一個(gè),在整體結(jié)構(gòu)上簡(jiǎn)潔明了,不需要增加系統(tǒng)的復(fù)雜性。
附圖說(shuō)明
圖1是本發(fā)明的原理圖。
具體實(shí)施方式
以下將結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案及有益效果進(jìn)行詳細(xì)說(shuō)明。
如圖1所示,本發(fā)明提供一種客戶端與服務(wù)器連接狀態(tài)的檢測(cè)方法,包括如下步驟:
步驟1,首先判斷客戶端的狀態(tài)屬性是否處于空閑狀態(tài)(在客戶端接入服務(wù)器的時(shí)候默認(rèn)初始狀態(tài)屬性為:未與服務(wù)器通信,空閑;當(dāng)客戶端和服務(wù)器數(shù)據(jù)交互時(shí),客戶端狀態(tài)屬性為:與服務(wù)器通信中,繁忙),若客戶端處于空閑狀態(tài),則轉(zhuǎn)步驟2,若客戶端與服務(wù)器正在數(shù)據(jù)交互中,則轉(zhuǎn)步驟4;
步驟2,當(dāng)客戶端處于空閑狀態(tài),與服務(wù)器沒(méi)有業(yè)務(wù)上的交互需求時(shí),采用定時(shí)發(fā)送心跳幀的方式:即客戶端定時(shí)向服務(wù)器發(fā)送一條特定格式的消息(即心跳幀),然后進(jìn)入一個(gè)定時(shí)等待服務(wù)器回復(fù)操作;若客戶端與服務(wù)器連接正常,則服務(wù)器會(huì)在收到消息后,向客戶端反饋連接正常的回復(fù),當(dāng)客戶端在指定時(shí)間內(nèi)收到該回復(fù)時(shí),確認(rèn)兩者連接正常,并將客戶端的狀態(tài)屬性更新為:未與服務(wù)器通信,空閑,再返回步驟1;若客戶端與服務(wù)器連接異常,則客戶端在指定時(shí)間內(nèi)不會(huì)接收到服務(wù)器的消息回復(fù),則轉(zhuǎn)步驟3;
步驟3,客戶端發(fā)出心跳幀后,在指定時(shí)間內(nèi)未接收到服務(wù)器的消息回復(fù),則在到達(dá)指定時(shí)間時(shí),客戶端會(huì)在設(shè)定時(shí)間后(可設(shè)為1s)向服務(wù)器重新發(fā)送心跳幀,以確認(rèn)客戶端和服務(wù)器的通信情況(因?yàn)榭赡艿谝淮伟l(fā)送的心跳幀產(chǎn)生了丟包現(xiàn)象)。若重發(fā)心跳幀后,客戶端在指定時(shí)間內(nèi)成功收到服務(wù)器的應(yīng)答消息,則確認(rèn)客戶端與服務(wù)器連接正常,將客戶端的狀態(tài)屬性更新為:未與服務(wù)器通信,空閑,再返回步驟1;若重發(fā)心跳幀后,在指定時(shí)間內(nèi)仍未能收到服務(wù)器的應(yīng)答消息,則說(shuō)明客戶端和服務(wù)器通信出現(xiàn)異常,更新客戶端的屬性狀態(tài)為:與服務(wù)器連接中斷,同時(shí)客戶端會(huì)每隔設(shè)定時(shí)間(如5s)自動(dòng)重連服務(wù)器,若客戶端重新連接服務(wù)器成功,則重新進(jìn)入步驟1;
步驟4,當(dāng)客戶端需要與服務(wù)器進(jìn)行數(shù)據(jù)交互時(shí),客戶端首先向服務(wù)器發(fā)送心跳幀,詢問(wèn)與服務(wù)器的連接狀態(tài)。若客戶端在發(fā)送心跳幀后的指定時(shí)間內(nèi)收到服務(wù)器的應(yīng)答,證明客戶端與服務(wù)器通信正常,然后開(kāi)始客戶端與服務(wù)器的數(shù)據(jù)交互,同時(shí)更新客戶端的狀態(tài)屬性為:與服務(wù)器通信中,繁忙;若客戶端在發(fā)送心跳幀后,指定時(shí)間內(nèi)未收到服務(wù)器的應(yīng)答消息,則轉(zhuǎn)步驟5;
步驟5,客戶端發(fā)送心跳幀后,若在指定時(shí)間內(nèi)未收到服務(wù)器的應(yīng)答消息,客戶端會(huì)在設(shè)定時(shí)間后(如1s)重發(fā)一次心跳幀,確認(rèn)客戶端和服務(wù)器的通信情況(因?yàn)榭赡艿谝淮伟l(fā)送的心跳幀產(chǎn)生了丟包現(xiàn)象)。若重發(fā)心跳幀后,客戶端成功收到服務(wù)器的應(yīng)答消息,則證明客戶端與服務(wù)器通信正常,開(kāi)始數(shù)據(jù)交互,同時(shí)更新客戶端的狀態(tài)屬性為:與服務(wù)器通信中,繁忙;若重發(fā)心跳幀后仍未能在指定時(shí)間內(nèi)收到服務(wù)器的應(yīng)答消息,則說(shuō)明客戶端和服務(wù)器通信出現(xiàn)異常,更新客戶端的屬性狀態(tài)為:與服務(wù)器連接中斷,同時(shí)客戶端會(huì)每隔設(shè)定時(shí)間(如5s)自動(dòng)重連服務(wù)器;若客戶端重新連接服務(wù)器成功,則重新進(jìn)入步驟1。
以上實(shí)施例僅為說(shuō)明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護(hù)范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動(dòng),均落入本發(fā)明保護(hù)范圍之內(nèi)。