基于不穩(wěn)定移動(dòng)網(wǎng)絡(luò)的消息通信方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明實(shí)施例提供一種消息通信方法及系統(tǒng),屬于網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域,所述方法包括:當(dāng)客戶端之間進(jìn)行消息收發(fā)時(shí),將接收客戶端從服務(wù)器收到的新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較;若新消息版本號(hào)與接收客戶端的本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào);若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則啟動(dòng)同步進(jìn)程,接收客戶端將本地消息版本號(hào)發(fā)送給服務(wù)器,服務(wù)器將本地消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給接收客戶端。本發(fā)明實(shí)施例建立消息版本號(hào)機(jī)制,保證了通信雙方收發(fā)的消息連續(xù),不會(huì)因?yàn)榫W(wǎng)絡(luò)環(huán)境的不穩(wěn)定導(dǎo)致消息丟失或亂序,避免了因?yàn)榉磸?fù)回執(zhí)和重發(fā)而導(dǎo)致流量的增加。
【專利說(shuō)明】
基于不穩(wěn)定移動(dòng)網(wǎng)絡(luò)的消息通信方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明實(shí)施例涉及網(wǎng)絡(luò)通訊技術(shù)領(lǐng)域,尤其涉及一種消息通信方法及系統(tǒng),尤其適用于不穩(wěn)定的移動(dòng)網(wǎng)絡(luò)。【背景技術(shù)】
[0002]在無(wú)線互聯(lián)網(wǎng)的通信中,手機(jī)使用者的位置在不斷變換,網(wǎng)絡(luò)狀態(tài)也在不斷切換。 例如,用戶進(jìn)入電梯,網(wǎng)絡(luò)連接就會(huì)斷開(kāi)。而當(dāng)用戶從4G網(wǎng)絡(luò)進(jìn)入wifi環(huán)境,網(wǎng)絡(luò)也會(huì)斷開(kāi)。 在這種情況下,如果網(wǎng)絡(luò)斷開(kāi)的時(shí)候有消息發(fā)送到這臺(tái)手機(jī),則由于網(wǎng)絡(luò)連接斷開(kāi),就會(huì)導(dǎo)致該手機(jī)無(wú)法收到這條消息。
【發(fā)明內(nèi)容】
[0003]目前業(yè)內(nèi)針對(duì)這種不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的網(wǎng)絡(luò)通信,多使用回執(zhí)和重發(fā)的通信機(jī)制。這種方式是在每次服務(wù)器下發(fā)消息的時(shí)候都要求手機(jī)在接到消息的時(shí)候進(jìn)行回執(zhí)通信。如果沒(méi)有收到回執(zhí),那么服務(wù)器就認(rèn)為手機(jī)沒(méi)有收到,會(huì)重發(fā)這條消息。這種方式會(huì)因?yàn)椴粩嗟幕貓?zhí)信息而造成更多的網(wǎng)絡(luò)流量,也會(huì)由于不斷重發(fā)增加服務(wù)器的壓力。
[0004]本發(fā)明實(shí)施例提供一種消息通信方法及系統(tǒng),用以解決上述現(xiàn)有技術(shù)中的缺陷, 實(shí)現(xiàn)通信雙方信息發(fā)送和接收的有序性。
[0005]本發(fā)明實(shí)施例提供一種消息通信方法,應(yīng)用于客戶端之間的消息收發(fā),該方法包括:
[0006]當(dāng)客戶端之間進(jìn)行消息收發(fā)時(shí),將接收客戶端從服務(wù)器收到的新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較;
[0007]若新消息版本號(hào)與接收客戶端的本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào);
[0008]若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則啟動(dòng)同步進(jìn)程,接收客戶端將本地消息版本號(hào)發(fā)送給服務(wù)器,以從服務(wù)器接收本地消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)。
[0009]本發(fā)明實(shí)施例還提供一種消息通信系統(tǒng),包括客戶端和服務(wù)器,其中,
[0010]客戶端含有
[0011]連接模塊,配置為與服務(wù)器連接;
[0012]消息收發(fā)模塊,配置為能夠在客戶端之間相互進(jìn)行消息收發(fā);
[0013]服務(wù)器配包括消息版本號(hào)管理模塊,生成進(jìn)行消息收發(fā)的客戶端之間的更新的消息版本號(hào)并向所述進(jìn)行消息收發(fā)的客戶端分別發(fā)送;
[0014]其中,客戶端還包括消息版本號(hào)管理模塊,配置為:
[0015]-若收到新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào);
[0016]_若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則啟動(dòng)同步進(jìn)程,將本地消息版本號(hào)發(fā)送給服務(wù)器以獲取所述本地消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)。
[0017]本發(fā)明實(shí)施例提供的基于不穩(wěn)定移動(dòng)網(wǎng)絡(luò)的消息通信方法及系統(tǒng),任一客戶端發(fā)送消息給另一客戶端,服務(wù)器將通信的兩個(gè)客戶端之間的消息版本號(hào)更新,得到新消息版本號(hào),服務(wù)器將消息和新消息版本號(hào)發(fā)送給接收客戶端,接收客戶端收到消息和新消息版本號(hào)后,將新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較,若消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)進(jìn)行更新,得到新消息版本號(hào),并展示消息,若消息版本號(hào)與本地消息版本號(hào)不連續(xù),先將消息保存但不暫時(shí)不展示消息,發(fā)起同步請(qǐng)求,啟動(dòng)同步進(jìn)程,月艮務(wù)器將本地消息版本號(hào)之后的所有消息發(fā)送給接收客戶端,此時(shí),接收客戶端的消息版本號(hào)實(shí)現(xiàn)了更新同步;通過(guò)消息版本號(hào)機(jī)制和推送、主動(dòng)同步的方式,保證了通信雙方的消息連續(xù),不會(huì)因?yàn)榫W(wǎng)絡(luò)環(huán)境的不穩(wěn)定導(dǎo)致消息丟失或亂序,改變了現(xiàn)有技術(shù)中需要通過(guò)不斷的回執(zhí)和重發(fā)的通信機(jī)制,避免了因?yàn)榉磸?fù)回執(zhí)和重發(fā)而導(dǎo)致流量的增加,同時(shí),避免反復(fù)重發(fā)增加服務(wù)器的壓力,實(shí)現(xiàn)了客戶端在不穩(wěn)定的網(wǎng)絡(luò)狀態(tài)下也能不丟失信息,并且通信的雙方信息發(fā)送和接收是有序的,同時(shí)降低了流量和服務(wù)器的壓力?!靖綀D說(shuō)明】
[0018]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0019]圖1為本發(fā)明實(shí)施例的短消息通信方法實(shí)施例的流程圖;
[0020]圖2為同步進(jìn)程的一種實(shí)施例的示意圖;[0021 ]圖3為本發(fā)明實(shí)施例的短消息通信系統(tǒng)的示意圖;
[0022]圖4為本發(fā)明實(shí)施例的短消息通信裝置的示意圖?!揪唧w實(shí)施方式】[〇〇23]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[〇〇24]圖1?圖4示意性地顯示了根據(jù)本發(fā)明的一種實(shí)施方式的基于不穩(wěn)定移動(dòng)網(wǎng)絡(luò)的消息通信方法和系統(tǒng)。
[0025]如圖1和圖2所示,根據(jù)本發(fā)明的消息通信方法的實(shí)施例1包括以下步驟:
[0026]S1:客戶端之間進(jìn)行消息收發(fā),發(fā)送客戶端發(fā)送消息給接收客戶端。客戶端發(fā)出的消息是不包含消息版本號(hào)的。消息版本號(hào)完全由服務(wù)器進(jìn)行增加和管理,服務(wù)器在接收到客戶端發(fā)出來(lái)的消息時(shí),會(huì)啟動(dòng)內(nèi)部消息版本號(hào)管理機(jī)制,對(duì)消息版本號(hào)進(jìn)行增加更新,客戶端只是接收服務(wù)器發(fā)送過(guò)來(lái)的消息版本號(hào)。
[0027]S3:接收客戶端收到包含新消息版本號(hào)和消息的消息協(xié)議后,將從服務(wù)器收到的新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較。
[0028]S31:若新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào),并展示消息。
[0029]S32:若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,而是啟動(dòng)同步進(jìn)程。接收客戶端通過(guò)服務(wù)器管理的消息版本號(hào)進(jìn)行消息同步。例如,接收客戶端可將本地消息版本號(hào)發(fā)送給所述服務(wù)器,以從所述服務(wù)器接收所述本地消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)。例如可以執(zhí)行以下步驟:
[0030]S321:接收客戶端發(fā)送同步請(qǐng)求協(xié)議(同步請(qǐng)求協(xié)議中裝載了該客戶端的本地消息版本號(hào)),將本地消息版本號(hào)發(fā)送給服務(wù)器。
[0031]S322:服務(wù)器返回同步返回協(xié)議(同步返回協(xié)議中包含了消息版本號(hào)和與消息版本號(hào)對(duì)應(yīng)的消息),服務(wù)器將接收到的消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給接收客戶端。
[0032]如圖1和2所示,在上述實(shí)施例1的基礎(chǔ)上,根據(jù)本發(fā)明的消息通信方法的實(shí)施例2 還包括如下步驟:
[0033]S0:若客戶端網(wǎng)絡(luò)斷開(kāi)并重新連接,則啟動(dòng)同步進(jìn)程。
[0034]S321:客戶端發(fā)送同步請(qǐng)求協(xié)議(同步請(qǐng)求協(xié)議中裝載了該客戶端的本地消息版本號(hào)),將本地消息版本號(hào)發(fā)送給服務(wù)器。
[0035]S322:服務(wù)器返回同步返回協(xié)議(同步返回協(xié)議中包含了消息版本號(hào)和與消息版本號(hào)對(duì)應(yīng)的消息),服務(wù)器將接收到的消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給客戶端。在該同步進(jìn)程中,該客戶端將本地消息版本號(hào)發(fā)送給服務(wù)器,服務(wù)器將接收到的消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給客戶端,以判斷在網(wǎng)絡(luò)斷開(kāi)期間,是否有新消息未接收,保證新消息能夠及時(shí)送達(dá)。
[0036]如圖1?圖2所示,根據(jù)本發(fā)明的消息通信方法實(shí)施例3包括如下步驟:
[0037]S0:若客戶端網(wǎng)絡(luò)斷開(kāi)并重新連接,則啟動(dòng)同步進(jìn)程。在該同步進(jìn)程中,該客戶端將本地消息版本號(hào)發(fā)送給服務(wù)器,服務(wù)器將接收到的消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給客戶端,以判斷在網(wǎng)絡(luò)斷開(kāi)期間,是否有新消息未接收,保證新消息能夠及時(shí)送達(dá)。
[0038]S1:客戶端之間進(jìn)行消息收發(fā),發(fā)送客戶端發(fā)送消息給接收客戶端??蛻舳税l(fā)出的消息是不包含消息版本號(hào)的。消息版本號(hào)完全由服務(wù)器進(jìn)行增加和管理,服務(wù)器在接收到客戶端發(fā)出來(lái)的消息時(shí),會(huì)啟動(dòng)內(nèi)部消息版本號(hào)管理機(jī)制,對(duì)消息版本號(hào)進(jìn)行增加更新,客戶端只是接收服務(wù)器發(fā)送過(guò)來(lái)的消息版本號(hào)。
[0039]S2:服務(wù)器對(duì)接收到消息進(jìn)行合法性判斷。
[0040]S21:若消息不合法,通知發(fā)送客戶端消息發(fā)送失敗,發(fā)送客戶端和接收客戶端之間的本地消息版本號(hào)不變。服務(wù)器會(huì)發(fā)送消息發(fā)送失敗回執(zhí)協(xié)議至發(fā)送客戶端。消息發(fā)送失敗回執(zhí)協(xié)議包含此不合法消息之前的兩客戶端之間的消息版本號(hào),通知發(fā)送客戶端消息發(fā)送失敗。例如客戶端A將客戶端B拉入了黑名單,那么客戶端B發(fā)送給客戶端A的消息就是不合法的。服務(wù)器視這次消息發(fā)送是無(wú)效的,那么客戶端A和客戶端B之間的消息版本號(hào)不會(huì)改變。
[0041]S22:當(dāng)服務(wù)器判斷消息是合法的,則服務(wù)器將兩客戶端之間的消息版本號(hào)更新, 例如將消息版本號(hào)增加形成新消息版本號(hào)并保存新消息版本號(hào),且服務(wù)器發(fā)送消息發(fā)送成功回執(zhí)協(xié)議至發(fā)送客戶端。消息發(fā)送成功回執(zhí)協(xié)議包括新消息版本號(hào),由此,將新消息版本號(hào)返回給發(fā)送客戶端。發(fā)送客戶端將本地消息版本號(hào)更新為新消息版本號(hào)。
[0042]S23:同時(shí),當(dāng)服務(wù)器判斷消息是合法的,服務(wù)器將消息和更新的消息版本號(hào)發(fā)送給接收客戶端。服務(wù)器發(fā)送消息協(xié)議,消息協(xié)議內(nèi)含消息和與消息對(duì)應(yīng)的新消息版本號(hào)。月艮務(wù)器發(fā)送消息時(shí),其實(shí)是發(fā)送包含消息和新消息版本號(hào)的消息協(xié)議。通過(guò)發(fā)送消息協(xié)議將消息和新消息版本號(hào)發(fā)送給接收客戶端。
[0043]S3:接收客戶端收到包含新消息版本號(hào)和消息的消息協(xié)議后,將從服務(wù)器收到的新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較。
[0044]S31:若新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào),并展示消息。
[0045]S32:若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,而是啟動(dòng)同步進(jìn)程。
[0046]S321:接收客戶端發(fā)送同步請(qǐng)求協(xié)議(同步請(qǐng)求協(xié)議中裝載了該客戶端的本地消息版本號(hào)),將本地消息版本號(hào)發(fā)送給服務(wù)器。
[0047]S322:服務(wù)器返回同步返回協(xié)議(同步返回協(xié)議中包含了消息版本號(hào)和與消息版本號(hào)對(duì)應(yīng)的消息),服務(wù)器將接收到的消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)發(fā)送給接收客戶端。
[0048]根據(jù)上述實(shí)施方案,隨著移動(dòng)通信終端的位置在不斷變換,其網(wǎng)絡(luò)狀態(tài)也在不斷切換。通信終端上的應(yīng)用客戶端經(jīng)常會(huì)出現(xiàn)斷開(kāi)、重連的情況。如果在客戶端A網(wǎng)絡(luò)斷開(kāi)期間,有客戶端B對(duì)客戶端A發(fā)送消息,那么客戶端A將無(wú)法收到消息。當(dāng)客戶端A重新上線后, 客戶端A發(fā)起同步進(jìn)程,將客戶端A本地消息版本號(hào)發(fā)送給服務(wù)器,服務(wù)器將本地消息版本號(hào)之后的消息全部按消息版本號(hào)次序依次發(fā)給客戶端A,保證消息不丟失不紊亂。
[0049]例如,在客戶端A網(wǎng)絡(luò)斷開(kāi)期間,客戶端B給客戶端A發(fā)來(lái)四條消息,假設(shè)這四條消息的消息版本號(hào)是5到8,客戶端A掉線之前本地消息版本號(hào)是4。當(dāng)客戶端A重新上線后,發(fā)起同步進(jìn)程,將本地消息版本號(hào)4發(fā)給服務(wù)器。服務(wù)器將消息版本號(hào)為5到8的消息依序發(fā)給客戶端A并將本地消息版本號(hào)更新為8。如果在發(fā)送同步進(jìn)程過(guò)程中,由于服務(wù)器崩潰等原因,導(dǎo)致同步不成功,那么客戶端A無(wú)法收到新消息和更新消息版本號(hào)。當(dāng)下次客戶端B又給客戶端A發(fā)送消息時(shí),將發(fā)現(xiàn)消息版本號(hào)和客戶端A本地消息版本號(hào)不連續(xù)(因?yàn)樯洗螖嗑W(wǎng)期間,客戶端B給客戶端A發(fā)送的信息,由于服務(wù)器崩潰客戶端A沒(méi)有及時(shí)更新消息版本號(hào), 沒(méi)有收到上次客戶端B發(fā)送的消息)。此時(shí),客戶端A再次發(fā)起同步進(jìn)程,要求得到上次和本次客戶端B給客戶端A發(fā)送的消息以及更新本地消息版本號(hào)。
[0050]在上個(gè)例子中,由于服務(wù)器崩潰導(dǎo)致客戶端A同步失敗,客戶端A的本地消息版本號(hào)仍為4。此時(shí),客戶端B發(fā)來(lái)消息版本號(hào)為9的消息,客戶端A發(fā)現(xiàn)本地消息版本號(hào)4和發(fā)來(lái)的消息版本號(hào)9不連續(xù),則客戶端A暫時(shí)不展示消息版本號(hào)為9的消息,而是發(fā)起同步進(jìn)程, 服務(wù)器將消息版本號(hào)為5到8的消息依序發(fā)給客戶端A并將本地消息版本號(hào)更新為9。
[0051]若在同步過(guò)程中,客戶端B又給客戶端A發(fā)來(lái)了新消息,那么在同步進(jìn)程結(jié)束之前, 新消息不會(huì)被展示,也先不做連續(xù)性判斷。當(dāng)同步結(jié)束后,再對(duì)新消息進(jìn)行連續(xù)性判斷,展示新消息。例如,在上個(gè)例子的同步過(guò)程中,客戶端B又給客戶端A發(fā)送了第10條消息,那么在同步進(jìn)程結(jié)束之前,第10條消息不會(huì)被展示,也先不做連續(xù)性判斷。當(dāng)同步結(jié)束后,再進(jìn)行連續(xù)性判斷,并展示第10條消息和將本地消息版本號(hào)更新為10。
[0052]在本實(shí)施方式中,由于通過(guò)消息版本號(hào)機(jī)制和推送、主動(dòng)同步的方式,保證了通信雙方的消息連續(xù),不會(huì)因?yàn)榫W(wǎng)絡(luò)環(huán)境的不穩(wěn)定導(dǎo)致消息丟失或亂序。
[0053]為了避免客戶端接收到非法消息,服務(wù)器還可對(duì)接收到消息進(jìn)行合法性判斷。若判斷消息不合法,則通知發(fā)送客戶端消息發(fā)送失敗。兩客戶端之間消息版本號(hào)不變。若消息合法,才進(jìn)行消息版本號(hào)更新和消息推送步驟。[〇〇54]為了保證客戶端接收到的消息是有序的,不會(huì)出現(xiàn)消息順序紊亂的情況,消息版本號(hào)為從〇開(kāi)始的64位無(wú)符號(hào)二進(jìn)制數(shù)。消息版本號(hào)更新具有連續(xù)偏序性,即消息版本號(hào)只能增加不能減少。簡(jiǎn)言之,消息版本號(hào)只能從〇開(kāi)始順序增加,而不會(huì)出現(xiàn)消息版本號(hào)已經(jīng)是10,而后又變成9或更少的情況。
[0055]如圖3所示,根據(jù)本發(fā)明實(shí)施例的另一個(gè)方面,還提供一種消息通信系統(tǒng),尤其適用于不穩(wěn)定的移動(dòng)網(wǎng)絡(luò)中客戶端的消息通信以避免消息丟失。[〇〇56]如圖3所示,根據(jù)本發(fā)明的消息通信系統(tǒng)的實(shí)施例1包括接收客戶端20、發(fā)送客戶端10、通信網(wǎng)絡(luò)30和服務(wù)器40。其中,接收客戶端20、發(fā)送客戶端10均可安裝于通信終端(如手機(jī)、智能手表、智能電視、平板電腦等)上。本領(lǐng)域技術(shù)人員可以理解,本申請(qǐng)中所稱接收客戶端和發(fā)送客戶端可理解為安裝有實(shí)現(xiàn)上述實(shí)施例中方法的應(yīng)用程序的通信終端。 [〇〇57]通信網(wǎng)絡(luò)30為客戶端10,20與服務(wù)器40之間的通信提供數(shù)據(jù)鏈路。[〇〇58]服務(wù)器40包括消息版本號(hào)管理模塊403。服務(wù)器的消息版本號(hào)管理模塊403中預(yù)先建立了消息版本號(hào)管理機(jī)制,如上文中所述。服務(wù)器40的消息版本號(hào)管理模塊403將兩客戶端10,20之間發(fā)送消息的消息版本號(hào)更新,且將新消息版本號(hào)返回給發(fā)送客戶端10。同時(shí), 發(fā)送消息協(xié)議,將消息的具體內(nèi)容和與消息對(duì)應(yīng)的消息版本號(hào)填入服務(wù)器40內(nèi)部設(shè)置的消息協(xié)議中,以消息協(xié)議的形式將消息的具體內(nèi)容和與消息對(duì)應(yīng)的消息版本號(hào)發(fā)給接收客戶端20。[〇〇59]客戶端10,20分別包括連接模塊101,201、消息收發(fā)模塊102,202和消息版本號(hào)管理模塊103,203。
[0060]客戶端10,20的連接模塊101,201負(fù)責(zé)客戶端10,20和服務(wù)器40之間的連接。如果通信終端網(wǎng)絡(luò)斷開(kāi)又重新連接,則客戶端10,20的連接模塊101,201負(fù)責(zé)發(fā)起客戶端10,20網(wǎng)絡(luò)重新連接。
[0061]消息收發(fā)模塊102,202負(fù)責(zé)發(fā)送和接收消息與消息版本號(hào)??蛻舳?0,20的消息版本號(hào)管理模塊1〇3,203負(fù)責(zé)接收服務(wù)器40發(fā)送的消息版本號(hào)并判斷接收到的消息版本號(hào)與本地消息版本號(hào)是否連續(xù),以確定是否需要發(fā)起同步進(jìn)程。客戶端10,20的消息版本號(hào)管理模塊103,203接收到服務(wù)器40發(fā)送過(guò)來(lái)的消息協(xié)議,讀取消息協(xié)議中的新消息版本號(hào),并與本地消息版本號(hào)比較,判斷是否連續(xù)。若連續(xù),則展示消息并將本地消息版本號(hào)更新為新消息版本號(hào)。若不連續(xù),客戶端1〇,20的消息版本號(hào)管理模塊103,203向服務(wù)器發(fā)起同步請(qǐng)求協(xié)議,同步請(qǐng)求協(xié)議中裝載了本地消息版本號(hào),要求服務(wù)器40將本地消息版本號(hào)之后的所有消息按照消息協(xié)議中規(guī)定的格式發(fā)給自身,同時(shí)更新本地消息版本號(hào)。[〇〇62]發(fā)送客戶端10的消息收發(fā)模塊102將消息發(fā)送至服務(wù)器40。發(fā)送客戶端10的消息版本號(hào)管理模塊103接收服務(wù)器40返回的消息版本號(hào)。[〇〇63]接收客戶端20的消息收發(fā)模塊202收到新消息版本號(hào)和消息后,接收客戶端20的消息版本號(hào)管理模塊203將新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較,若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,而是啟動(dòng)同步進(jìn)程。在該同步進(jìn)程中,接受客戶端20的消息版本號(hào)管理模塊203發(fā)起同步請(qǐng)求協(xié)議,同步請(qǐng)求協(xié)議中裝載了本地消息版本號(hào),要求服務(wù)器40將本地消息版本號(hào)之后的所有消息以消息協(xié)議的形式發(fā)給自身,同時(shí)更新本地消息版本號(hào)。若新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào)。[〇〇64]如圖3所示,根據(jù)本發(fā)明的消息通信系統(tǒng)的實(shí)施例2包括接收客戶端20、發(fā)送客戶端10、通信網(wǎng)絡(luò)30和服務(wù)器40,其中,接收客戶端20、發(fā)送客戶端10均可安裝于通信終端(如手機(jī)、智能手表、智能電視、平板電腦等)上。通信網(wǎng)絡(luò)30為客戶端10,20與服務(wù)器40之間的通信提供數(shù)據(jù)鏈路。[〇〇65]服務(wù)器40包括連接模塊401、消息合法性判斷模塊402、消息版本號(hào)管理模塊403和存儲(chǔ)模塊404。服務(wù)器40的連接模塊401管理客戶端10,20與服務(wù)器40之間的連接,并負(fù)責(zé)維護(hù)服務(wù)器40與客戶端10,20之間的長(zhǎng)連接(長(zhǎng)連接是相較于短連接而言的,指在一個(gè)連接上可以連續(xù)發(fā)送多個(gè)數(shù)據(jù)包。在連接保持期間,如果沒(méi)有數(shù)據(jù)包發(fā)送,需要雙方發(fā)鏈路檢測(cè)包),將通過(guò)長(zhǎng)連接發(fā)來(lái)的消息轉(zhuǎn)發(fā)給消息合法性判斷模塊402。服務(wù)器40的連接模塊401和消息合法性判斷模塊402之間通過(guò)消息隊(duì)列進(jìn)行通信。服務(wù)器的消息版本號(hào)管理模塊403中預(yù)先建立了消息版本號(hào)管理機(jī)制,如上文中所述。消息合法性判斷模塊402對(duì)收到的消息進(jìn)行合法性判斷。消息是否合法是按照不同的聊天業(yè)務(wù)邏輯來(lái)判斷的(例如,客戶端A將客戶端B拉入黑名單,那么客戶端B給客戶端A發(fā)的消息就是不合法了。又如,客戶端B給客戶端A 發(fā)送了病毒短消息,那么此條消息也是不合法的)。若消息不合法,則向發(fā)送客戶端10發(fā)送消息,通知發(fā)送客戶端10消息發(fā)送失敗。在此情況下,服務(wù)器40不會(huì)更新消息版本號(hào)也不會(huì)發(fā)送消息,發(fā)送客戶端10的消息版本號(hào)保持不變。若消息合法,則服務(wù)器40的消息版本號(hào)管理模塊403將兩客戶端10,20之間發(fā)送消息的消息版本號(hào)更新,且將新消息版本號(hào)保存在存儲(chǔ)模塊404并返回給發(fā)送客戶端10。同時(shí),發(fā)送消息協(xié)議,將消息的具體內(nèi)容和與消息對(duì)應(yīng)的消息版本號(hào)填入服務(wù)器40內(nèi)部設(shè)置的消息協(xié)議中,以消息協(xié)議的形式將消息的具體內(nèi)容和與消息對(duì)應(yīng)的消息版本號(hào)發(fā)給接收客戶端20。服務(wù)器40將消息協(xié)議通過(guò)自身的連接模塊 401發(fā)送給接收客戶端20,將消息和新消息版本號(hào)發(fā)送給接收客戶端20。存儲(chǔ)模塊404存儲(chǔ)消息內(nèi)容以及消息版本號(hào)。[〇〇66]客戶端10,20分別包括連接模塊101,201、消息收發(fā)模塊102,202、消息版本號(hào)管理模塊103,203和展示模塊104,204。[〇〇67]客戶端10,20的連接模塊101,201負(fù)責(zé)客戶端10,20和服務(wù)器40之間的連接。如果通信終端網(wǎng)絡(luò)斷開(kāi)又重新連接,則客戶端10,20的連接模塊101,201負(fù)責(zé)發(fā)起客戶端10,20網(wǎng)絡(luò)重新連接。[〇〇68]消息收發(fā)模塊102,202負(fù)責(zé)發(fā)送和接收消息與消息版本號(hào)??蛻舳?0,20的消息版本號(hào)管理模塊1〇3,203負(fù)責(zé)接收服務(wù)器40發(fā)送的消息版本號(hào)并判斷接收到的消息版本號(hào)與本地消息版本號(hào)是否連續(xù),以確定是否需要發(fā)起同步進(jìn)程??蛻舳?0,20的消息版本號(hào)管理模塊103,203接收到服務(wù)器40發(fā)送過(guò)來(lái)的消息協(xié)議,讀取消息協(xié)議中的新消息版本號(hào),并與本地消息版本號(hào)比較,判斷是否連續(xù)。若連續(xù),則展示消息并將本地消息版本號(hào)更新為新消息版本號(hào)。若不連續(xù),客戶端1〇,20的消息版本號(hào)管理模塊103,203向服務(wù)器發(fā)起同步請(qǐng)求協(xié)議,同步請(qǐng)求協(xié)議中裝載了本地消息版本號(hào),要求服務(wù)器40將本地消息版本號(hào)之后的所有消息按照消息協(xié)議中規(guī)定的格式發(fā)給自身,同時(shí)更新本地消息版本號(hào)。
[0069]展示模塊104,204依序展示接收到的消息內(nèi)容,根據(jù)消息協(xié)議中的消息版本號(hào)依序展示消息協(xié)議中的消息內(nèi)容。
[0070]發(fā)送客戶端10的消息收發(fā)模塊102將消息發(fā)送至服務(wù)器40。發(fā)送客戶端10的消息版本號(hào)管理模塊103接收服務(wù)器40返回的消息版本號(hào)。
[0071]接收客戶端20的消息收發(fā)模塊202收到新消息版本號(hào)和消息后,接收客戶端20的消息版本號(hào)管理模塊203將新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較,若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,而是啟動(dòng)同步進(jìn)程。在該同步進(jìn)程中,接受客戶端20的消息版本號(hào)管理模塊203發(fā)起同步請(qǐng)求協(xié)議,同步請(qǐng)求協(xié)議中裝載了本地消息版本號(hào),要求服務(wù)器40將本地消息版本號(hào)之后的所有消息以消息協(xié)議的形式發(fā)給自身,同時(shí)更新本地消息版本號(hào)。若新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào),并通過(guò)展示模塊204展示消息。
[0072]其有益效果是,通過(guò)消息版本號(hào)機(jī)制和推送、主動(dòng)同步的方式,保證了通信雙方的消息連續(xù),不會(huì)因?yàn)榫W(wǎng)絡(luò)環(huán)境的不穩(wěn)定導(dǎo)致消息丟失或亂序,改變了現(xiàn)有技術(shù)中需要通過(guò)不斷的回執(zhí)和重發(fā)的通信機(jī)制,避免了因?yàn)榉磸?fù)回執(zhí)和重發(fā)而導(dǎo)致流量的增加,同時(shí),避免反復(fù)重發(fā)增加服務(wù)器的壓力,實(shí)現(xiàn)了客戶端在不穩(wěn)定的網(wǎng)絡(luò)狀態(tài)下也能不丟失信息,并且通信的雙方信息發(fā)送和接收是有序的,同時(shí)降低了流量和服務(wù)器的壓力。
[0073]圖4為本申請(qǐng)實(shí)施例提供的一種消息通信裝置的示意圖,本申請(qǐng)具體實(shí)施例并不對(duì)一種消息通信裝置的具體實(shí)現(xiàn)做限定。如圖4所示,該消息通信裝置可以包括第一通信端 500:
[0074]處理器(processor)510、通信接口(Communicat1ns Interface)520、存儲(chǔ)器 (memory)530、以及通信總線540。其中:[〇〇75] 處理器510、通信接口 520、以及存儲(chǔ)器530通過(guò)通信總線540完成相互間的通信。 [〇〇76] 存儲(chǔ)器530、用于存放程序531。[〇〇77]通信接口 520,用于與比如客戶端等的網(wǎng)元通信。[〇〇78]處理器530,用于執(zhí)行程序531,具體可以執(zhí)行上述方法實(shí)施例中的相關(guān)步驟。
[0079]具體地,程序531可以包括程序代碼,所述程序代碼包括計(jì)算機(jī)操作指令。
[0080]處理器510可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Applicati〇n Specific Integrated Circuit),或者是被配置成實(shí)施本申請(qǐng)實(shí)施例的一個(gè)或多個(gè)集成電路。[〇〇81] 處理器510,用于執(zhí)行所述存儲(chǔ)器530存儲(chǔ)的程序531,所述程序531使得所述處理器530執(zhí)行以下操作:
[0082]對(duì)接收到消息進(jìn)行合法性判斷,若消息不合法,通知發(fā)送客戶端10消息發(fā)送失敗, 發(fā)送客戶端10和接收客戶端20之間的本地消息版本號(hào)不變;若消息合法,則將通信的兩客戶端10,20之間的消息版本號(hào)更新,發(fā)送消息發(fā)送成功回執(zhí)協(xié)議至發(fā)送客戶端10,同時(shí),發(fā)送消息協(xié)議給接收客戶端20;
[0083]消息通信裝置還可以包括第二通信端600,第二通信端600可以包括:
[0084]處理器(processor)610、通信接口(Communicat1ns Interface)620、存儲(chǔ)器 (memory)630、以及通信總線640。其中:
[0085] 處理器610、通信接口 620、以及存儲(chǔ)器630通過(guò)通信總線640完成相互間的通信。 [〇〇86] 存儲(chǔ)器630、用于存放程序631。[〇〇87] 通信接口 620,用于與比如服務(wù)器等的網(wǎng)元通信。[〇〇88] 處理器610,用于執(zhí)行程序631,具體可以執(zhí)行上述方法實(shí)施例中的相關(guān)步驟。[〇〇89]具體地,程序631可以包括程序代碼,所述程序代碼包括計(jì)算機(jī)操作指令。[〇〇9〇] 處理器610可能是一個(gè)中央處理器CPU,或者是特定集成電路ASIC(Applicati〇n Specific Integrated Circuit),或者是被配置成實(shí)施本申請(qǐng)實(shí)施例的一個(gè)或多個(gè)集成電路。[〇〇91] 處理器610,用于執(zhí)行所述存儲(chǔ)器630存儲(chǔ)的程序631,所述程序631使得所述處理器610執(zhí)行以下操作:
[0092]對(duì)接收到的消息協(xié)議中的新消息版本號(hào)進(jìn)行連續(xù)性判斷,若新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào),并展示消息,若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,而是啟動(dòng)同步進(jìn)程;
[0093]另外,若網(wǎng)絡(luò)斷開(kāi)并重新連接上,也啟動(dòng)同步進(jìn)程。[0〇94] 本發(fā)明實(shí)施例中可以通過(guò)硬件處理器(hardware processor)來(lái)實(shí)現(xiàn)相關(guān)功能模塊。
[0095]以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動(dòng)的情況下,即可以理解并實(shí)施。
[0096]通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實(shí)施方式可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。[〇〇97]最后應(yīng)說(shuō)明的是:以上實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分技術(shù)特征進(jìn)行等同替換。 這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。
【主權(quán)項(xiàng)】
1.消息通信方法,應(yīng)用于客戶端之間的消息收發(fā),包括:將接收客戶端從服務(wù)器收到的新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較;若所述新消息版本號(hào)與所述接收客戶端的本地消息版本號(hào)連續(xù),則將本地消息版本號(hào) 更新為新消息版本號(hào);若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則啟動(dòng)同步進(jìn)程,所述接收客戶端將本地 消息版本號(hào)發(fā)送給所述服務(wù)器,以從所述服務(wù)器接收所述本地消息版本號(hào)之后的所有消息 和與消息相對(duì)應(yīng)的消息版本號(hào)。2.根據(jù)權(quán)利要求1所述的方法,還包括:在客戶端從通信網(wǎng)絡(luò)斷開(kāi)后再次連接至所述通 信網(wǎng)絡(luò)時(shí),啟動(dòng)同步進(jìn)程。3.根據(jù)權(quán)利要求1所述的方法,還包括:所述服務(wù)器根據(jù)發(fā)送客戶端和接收客戶端之間 的消息發(fā)送,將所述客戶端之間的消息版本號(hào)更新為所述新消息版本號(hào)返回給發(fā)送客戶 端,和將消息和所述新消息版本號(hào)發(fā)送給所述接收客戶端。4.根據(jù)權(quán)利要求1或2或3所述的方法,還包括:對(duì)接收到消息進(jìn)行合法性判斷,若消息 不合法,通知所述發(fā)送客戶端消息發(fā)送失敗,所述發(fā)送客戶端和接收客戶端之間的本地消 息版本號(hào)不變;若消息合法,則所述服務(wù)器將所述消息版本號(hào)更新并將消息和所述更新的 消息版本號(hào)發(fā)送給所述接收客戶端。5.根據(jù)權(quán)利要求4所述的方法,其中,所述消息版本號(hào)為從0開(kāi)始的64位無(wú)符號(hào)二進(jìn)制 數(shù),所述消息版本號(hào)更新具有連續(xù)偏序性。6.消息通信系統(tǒng),包括客戶端和服務(wù)器,其中,所述客戶端含有連接模塊,配置為與所述服務(wù)器連接;消息收發(fā)模塊,配置為能夠在所述客戶端之間相互進(jìn)行消息收發(fā);所述服務(wù)器還包括消息版本號(hào)管理模塊,配置為生成進(jìn)行消息收發(fā)的客戶端之間的更 新的消息版本號(hào)并向所述進(jìn)行消息收發(fā)的客戶端分別發(fā)送;所述客戶端還包括消息版本號(hào)管理模塊,配置為:-若收到所述新消息版本號(hào)與本地消息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消 息版本號(hào);_若新消息版本號(hào)與本地消息版本號(hào)不連續(xù),則啟動(dòng)同步進(jìn)程,將本地消息版本號(hào)發(fā)送 給所述服務(wù)器以獲取所述本地消息版本號(hào)之后的所有消息和與消息相對(duì)應(yīng)的消息版本號(hào)。7.根據(jù)權(quán)利要求6所述的系統(tǒng),其中所述客戶端的消息版本號(hào)管理模塊還配置為,在客 戶端從通信網(wǎng)絡(luò)斷開(kāi)后再次連接至所述通信網(wǎng)絡(luò)時(shí),啟動(dòng)同步進(jìn)程。8.根據(jù)權(quán)利要求6所述的系統(tǒng),其中所述服務(wù)器還包括消息合法性判斷模塊,配置為對(duì) 接收到消息進(jìn)行合法性判斷。9.根據(jù)權(quán)利要求8所述的系統(tǒng),其中所述消息合法性判斷模塊判斷消息不合法時(shí),則通 知發(fā)送客戶端消息發(fā)送失敗,且所述服務(wù)器的消息版本號(hào)管理模塊不更新所述發(fā)送客戶端 和接收客戶端之間的消息版本號(hào);若消息合法,則所述服務(wù)器的消息版本號(hào)管理模塊將所 述發(fā)送客戶端和接收客戶端之間的消息版本號(hào)更新,并將新消息版本號(hào)返回給發(fā)送客戶 端,同時(shí)將所述服務(wù)器的存儲(chǔ)模塊中保存的消息和新消息版本號(hào)發(fā)送給所述接收客戶端。10.根據(jù)權(quán)利要求8或9所述的系統(tǒng),其中所述客戶端的消息版本號(hào)管理模塊還配置為,在收到新消息版本號(hào)和消息后,將新消息版本號(hào)與本地消息版本號(hào)進(jìn)行比較,若新消息版 本號(hào)與本地消息版本號(hào)不連續(xù),則暫不展示消息,啟動(dòng)同步進(jìn)程;若新消息版本號(hào)與本地消 息版本號(hào)連續(xù),則將本地消息版本號(hào)更新為新消息版本號(hào),并展示所述消息。
【文檔編號(hào)】H04W56/00GK105978796SQ201610490871
【公開(kāi)日】2016年9月28日
【申請(qǐng)日】2016年6月28日
【發(fā)明人】朱今, 李哲
【申請(qǐng)人】樂(lè)視控股(北京)有限公司, 樂(lè)視致新電子科技(天津)有限公司