一種基于xmpp協(xié)議的即時通訊方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于通訊和計算機的技術(shù)領(lǐng)域,具體地涉及一種基于XMPP協(xié)議的即時通訊方法,以及基于XMPP協(xié)議的即時通訊系統(tǒng)。
【背景技術(shù)】
[0002]XMPP(Extensible Messaging and Presence Protocol,可擴展消息處理現(xiàn)場協(xié)議)是基于XML(Extensible Markup Language,可擴展標記語言)的協(xié)議,它用于IKInternet Message,即時消息)以及在線現(xiàn)場探測。它促進服務器之間的準即時操作。這個協(xié)議可能最終允許因特網(wǎng)用戶向因特網(wǎng)上的其他任何人發(fā)送即時消息,即使這些因特網(wǎng)用戶的操作系統(tǒng)和瀏覽器不同。
[0003]XMPP協(xié)議是自由、開放、公開的,并且易于了解。而且在客戶端、服務器、組件、源碼庫等方面,都已經(jīng)各自有多種實現(xiàn)。XMPP的技術(shù)規(guī)格已被定義在RFC 3920及RFC 3921。任何頂供應商在遵循XMPP協(xié)議下,都可與Google Talk實現(xiàn)連接。
[0004]第一個Jabber (現(xiàn)在稱為XMPP)技術(shù)是Jeremie Miller在1998年開發(fā)的,現(xiàn)在已經(jīng)相當穩(wěn)定;數(shù)以百計的開發(fā)者為XMPP技術(shù)而努力。今日的互聯(lián)網(wǎng)上有數(shù)以萬計的XMPP服務器運作者,并有數(shù)以百萬計的人們使用XMPP實時傳訊軟件。
[0005]XMPP網(wǎng)絡(luò)的架構(gòu)和電子郵件十分相像;XMPP核心協(xié)議通信方式是先創(chuàng)建一個stream, XMPP以TCP傳遞XML數(shù)據(jù)流,沒有中央主服務器。任何人都可以運行自己的XMPP服務器,使個人及組織能夠掌控他們的實時傳訊體驗。
[0006]XMPP除了可用在實時通信的應用程序,還能用在網(wǎng)絡(luò)管理、內(nèi)容供稿、協(xié)同工具、文件共享、游戲、遠程系統(tǒng)監(jiān)控等。
[0007]但是,XMPP協(xié)議也存在著缺點,例如XMPP協(xié)議本身是不管對方是否收到消息,一旦自己發(fā)送出去,就說明本條消息發(fā)送成功。而所有移動通訊消息都會受到網(wǎng)絡(luò)信號強弱的影響,在網(wǎng)絡(luò)信號較弱的情況下,消息就有可能丟失。由于不知接收方是否收到消息,發(fā)送方一般都會發(fā)送若干遍相同的消息,這樣就會造成重復發(fā)送消息。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的技術(shù)解決問題是:克服現(xiàn)有技術(shù)的不足,提供一種基于XMPP協(xié)議的即時通訊方法,其不管移動網(wǎng)絡(luò)是否穩(wěn)定都能保證消息的準確到達,實現(xiàn)不丟消息,不重復發(fā)送消息。
[0009]本發(fā)明的技術(shù)解決方案是:這種基于XMPP協(xié)議的即時通訊方法,包括以下步驟:
[0010](I)接收第一終端發(fā)來的第一消息,根據(jù)所述第一消息向所述第一終端發(fā)送第一回執(zhí);
[0011](2)將所述第一消息轉(zhuǎn)發(fā)給所述第一消息的目標用戶所在的第二終端,同時將所述第一消息存入redis數(shù)據(jù)庫中;
[0012](3)在預定時間內(nèi)若沒有收到所述第二終端發(fā)來的第二回執(zhí),則將所述第一消息重新發(fā)送給所述第二終端;若收到所述第二終端發(fā)來的第二回執(zhí),則根據(jù)所述第二回執(zhí)將所述redis數(shù)據(jù)庫中的所述第一消息刪除。
[0013]還提供了一種基于XMPP協(xié)議的即時通訊系統(tǒng),所述系統(tǒng)包括:
[0014]第一接收模塊,用于接收第一終端發(fā)來的第一消息,根據(jù)所述第一消息向所述第一終端發(fā)送第一回執(zhí);
[0015]轉(zhuǎn)發(fā)模塊,用于將所述第一消息轉(zhuǎn)發(fā)給所述第一消息的目標用戶所在的第二終端,同時將所述第一消息存入redis數(shù)據(jù)庫中;
[0016]第二接收模塊,用于在預定時間內(nèi)沒有收到所述第二終端發(fā)來的第二回執(zhí)時,將所述第一消息重新發(fā)送給所述第二終端;或用于在收到所述第二終端發(fā)來的第二回執(zhí)時,根據(jù)所述第二回執(zhí)將所述redis數(shù)據(jù)庫中的所述第一消息刪除。
[0017]本發(fā)明采用回執(zhí)模式,并且將未收到回執(zhí)的消息存入redis數(shù)據(jù)庫而反復發(fā)送,只有超時情況下才不再發(fā)送,但會將該消息轉(zhuǎn)存到數(shù)據(jù)庫中,因此不管移動網(wǎng)絡(luò)是否穩(wěn)定都能保證消息的準確到達,實現(xiàn)不丟消息,不重復發(fā)送消息。
【附圖說明】
[0018]圖1為本發(fā)明一個實施例中基于XMPP協(xié)議的即時通訊方法的流程示意圖;
[0019]圖2為本發(fā)明另一個實施例中基于XMPP協(xié)議的即時通訊系統(tǒng)的模塊結(jié)構(gòu)示意圖;
[0020]圖3為本發(fā)明一個優(yōu)選實施例中的典型應用場景示意圖;
[0021]圖4為本發(fā)明另一個優(yōu)選實施例中典型應用場景的方法流程示意圖。
【具體實施方式】
[0022]本發(fā)明實施例中通過回執(zhí)機制保證了 XMPP協(xié)議消息的準確送達,如圖1所示,在本發(fā)明的一個實施例中,基于XMPP協(xié)議的即時通訊方法包括步驟:
[0023](I)接收第一終端發(fā)來的第一消息,根據(jù)所述第一消息向所述第一終端發(fā)送第一回執(zhí);
[0024](2)將所述第一消息轉(zhuǎn)發(fā)給所述第一消息的目標用戶所在的第二終端,同時將所述第一消息存入redis數(shù)據(jù)庫中;
[0025](3)在預定時間內(nèi)若沒有收到所述第二終端發(fā)來的第二回執(zhí),則將所述第一消息重新發(fā)送給所述第二終端;若收到所述第二終端發(fā)來的第二回執(zhí),則根據(jù)所述第二回執(zhí)將所述redis數(shù)據(jù)庫中的所述第一消息刪除。
[0026]本領(lǐng)域普通技術(shù)人員可以理解,實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,包括上述實施例方法的各步驟,而所述的存儲介質(zhì)可以是:R0M/RAM、磁碟、光盤、存儲卡等。因此,與本發(fā)明的方法相對應的,本發(fā)明還同時包括一種基于XMPP協(xié)議的即時通訊系統(tǒng),該系統(tǒng)通常以與方法各步驟相對應的功能模塊的形式表示;如圖2所示,所述系統(tǒng)包括:
[0027]第一接收模塊,用于接收第一終端發(fā)來的第一消息,根據(jù)所述第一消息向所述第一終端發(fā)送第一回執(zhí);
[0028]轉(zhuǎn)發(fā)模塊,用于將所述第一消息轉(zhuǎn)發(fā)給所述第一消息的目標用戶所在的第二終端,同時將所述第一消息存入redis數(shù)據(jù)庫中;
[0029]第二接收模塊,用于在預定時間內(nèi)沒有收到所述第二終端發(fā)來的第二回執(zhí)時,將所述第一消息重新發(fā)送給所述第二終端;或用于在收到所述第二終端發(fā)來的第二回執(zhí)時,根據(jù)所述第二回執(zhí)將所述redis數(shù)據(jù)庫中的所述第一消息刪除。
[0030]進一步如圖3所示,本發(fā)明的優(yōu)選實施例中,基于XMPP協(xié)議的即時通訊系統(tǒng)通過服務器在第一用戶A(使用第一終端)和第二用戶B (使用第二終端)之間進行基于XMPP協(xié)議的即時通訊,在圖3所示的典型應用場景中:
[0031]用戶A,其配置來發(fā)送第一消息到服務器;
[0032]服務器,其配置來通過第一消息中的消息ID,給用戶A發(fā)送第一回執(zhí)消息;將第一消息發(fā)送給用戶B,并且服務器將第一消息存到redis數(shù)據(jù)庫中;判斷是否收到用戶B發(fā)送的第二回執(zhí)消息,如果收到就根據(jù)第二回執(zhí)消息中的消息ID,將存到redis數(shù)據(jù)庫中的第一消息刪除,如果沒有收到并且沒有超過指定時間就在指定時間間隔后重新發(fā)送第一消息,如果沒有收到但是超過指定時間則將第一消息從redis數(shù)據(jù)庫刪除并轉(zhuǎn)存到數(shù)據(jù)庫中;
[0033]用戶B,其配置來接收第一消息,并向服務器發(fā)送第二回執(zhí)消息。
[0034]其中,第一用戶A和第二用戶B使用的第一終端和第二終端可以是任意網(wǎng)絡(luò)終端(包括但不限于PC、手機、PAD、移動終端和嵌入式系統(tǒng)等),即時通訊使用第一終端和第二終端中任意支持XMPP協(xié)議的應用(包括但不限于瀏覽器、郵件系統(tǒng)、嵌入式應用、移動APP、安卓應用、1S應用、web客戶端和PC客戶端等)均可。在某些實施方式中,第一終端和第二終端甚至可以是同一終端,第一用戶A和第二用戶B是在該終端中使用相同或不同應用的不同用戶;在某些極端的情況下,第一用戶A和第二用戶B甚至可以是同一用戶。
[0035]如圖4所示,本發(fā)明的另一優(yōu)選實施例對上述優(yōu)選場景中采用的基于XMPP協(xié)議的即時通訊方法做了詳細描述,包括以下步驟:
[0036](I)用戶A發(fā)送第一消息到服務器;
[0037](2)服務器通過第一消息中的消息ID,給用戶A發(fā)送第一回執(zhí)消息,證明用戶A發(fā)送第一消息成功;
[0038](3)由服務器將第一消息發(fā)送給用戶B,并且服務器將第一消息存到redis數(shù)據(jù)庫中;
[0039](4)服務器判斷是否收到用戶B發(fā)送的第二回執(zhí)消息,如果收到就執(zhí)行步驟(5),如果沒有收到并且沒有超過指定時間就執(zhí)行步驟(6),如果沒有收到但是超過指定時間則執(zhí)行步驟⑵;