專利名稱:基于對(duì)等模式建立討論組及該討論組即時(shí)通信的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電通信技術(shù)領(lǐng)域,特別是涉及一種基于對(duì)等模式建立討論組及該討論組的即時(shí)通信的方法。
背景技術(shù):
網(wǎng)絡(luò)即時(shí)通信服務(wù)(IM,Instant Messenger)是一種基于互聯(lián)網(wǎng)的通信服務(wù),即時(shí)通信工具在互聯(lián)網(wǎng)上得到了廣泛的應(yīng)用和認(rèn)可,將即時(shí)通信工具應(yīng)用到企業(yè)內(nèi)部,形成建立在網(wǎng)絡(luò)即時(shí)通信服務(wù)技術(shù)上的服務(wù)模式,是網(wǎng)絡(luò)即時(shí)通信服務(wù)的發(fā)展趨勢(shì)。
隨著網(wǎng)網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)即時(shí)通信工具已經(jīng)被大多數(shù)的網(wǎng)民所接受,進(jìn)行日常的交流與溝通,但是用戶之間的聊天模式發(fā)展至今仍然沒有太大的變化,用戶不再是只需要個(gè)人對(duì)個(gè)人的交流方式,同時(shí)也需要能夠與多個(gè)人對(duì)某個(gè)話題進(jìn)行討論,因此出現(xiàn)了群或者討論組這類多人對(duì)話的形式,群與討論組這類多人對(duì)話形式的出現(xiàn)大大方便了多個(gè)用戶之間的交流與溝通,使得用戶的交流范圍也變得更加的廣泛,同時(shí)可以在日常生活中通過IM軟件從多個(gè)用戶那里獲取到有價(jià)值的信息,提高自己解決問題的能力。
但是,目前討論組的建立都是以服務(wù)器為控制中心,即在服務(wù)器中建立討論組的數(shù)據(jù)表結(jié)構(gòu),在該服務(wù)器的數(shù)據(jù)庫中保存每個(gè)討論組的唯一標(biāo)識(shí)ID、討論組的名稱、討論組成員列表等信息。所述在服務(wù)器中建立討論組的方法的流程圖詳見圖1,其方法包括步驟L1用戶在討論組建立入口處希望建立討論組以及討論組成員列表;創(chuàng)建者選擇希望加入討論組的成員添加到討論組成員列表中;步驟L2將創(chuàng)建者的用戶標(biāo)識(shí)與成員列表組合到協(xié)議數(shù)據(jù)包中,根據(jù)約定的端口生成套接字接口把所述協(xié)議數(shù)據(jù)包發(fā)送到服務(wù)器中;
步驟L3所述服務(wù)器對(duì)接收到的數(shù)據(jù)包進(jìn)行解密或解析操作,并根據(jù)解析到的協(xié)議段、創(chuàng)建者用戶標(biāo)識(shí)以及成員數(shù)據(jù)列表寫入數(shù)據(jù)庫,并設(shè)置所述討論組的唯一標(biāo)識(shí)ID;步驟L4寫入數(shù)據(jù)庫成功后,向創(chuàng)建者發(fā)送帶有討論組唯一標(biāo)識(shí)ID的創(chuàng)建成功協(xié)議命令;所述創(chuàng)建者將接收到的討論組唯一標(biāo)識(shí)ID寫入本地存儲(chǔ)模塊中。
當(dāng)討論組建立成功后,由服務(wù)器負(fù)責(zé)維護(hù)與管理討論組中的所有基本信息(主要包括創(chuàng)建者用戶標(biāo)識(shí)、討論組的唯一標(biāo)識(shí)ID、討論組名稱、討論組已加入成員列表),而且對(duì)于討論組成員之間的消息溝通,實(shí)現(xiàn)過程為首先某個(gè)討論組成員發(fā)送某個(gè)消息給服務(wù)器,所述消息的內(nèi)容包括消息發(fā)送者的用戶標(biāo)識(shí)、消息內(nèi)容、消息的字體格式、討論組的唯一標(biāo)識(shí)ID等;當(dāng)服務(wù)器接收所述討論組的消息時(shí),通過討論組的唯一標(biāo)識(shí)ID到服務(wù)器的數(shù)據(jù)庫中查找該討論組的成員列表的用戶標(biāo)識(shí),即用戶號(hào)碼;然后遍歷所述用戶標(biāo)識(shí)的列表,根據(jù)該列表將所述消息轉(zhuǎn)發(fā)到相應(yīng)的討論組成員中;當(dāng)討論組成員接收到消息后,對(duì)此進(jìn)行解析并顯示。在這個(gè)過程中,服務(wù)器實(shí)際上完成了查找、遍歷、轉(zhuǎn)發(fā)等多項(xiàng)處理工作,極大的加大了服務(wù)器的壓力。
因此,隨著用戶數(shù)量以及建立討論組數(shù)量的逐漸增大,將會(huì)造成對(duì)討論組服務(wù)器的巨大存儲(chǔ)壓力,在即時(shí)通信過程中討論組服務(wù)器必須保證有足夠的存儲(chǔ)空間來保存與管理每個(gè)討論組的數(shù)據(jù)表結(jié)構(gòu);而且在討論組成員之間的消息傳遞時(shí),也是由討論組服務(wù)器根據(jù)成員列表進(jìn)行相應(yīng)的轉(zhuǎn)發(fā),會(huì)增大討論組服務(wù)器的并發(fā)處理壓力,從而增大討論組服務(wù)器開發(fā)時(shí)的運(yùn)營(yíng)成本。
發(fā)明內(nèi)容
本發(fā)明解決的技術(shù)問題是提供一種基于對(duì)等模式建立討論組及該討論組即時(shí)通信的方法。該方案以解決目前技術(shù)中服務(wù)器建立、管理以及刪除討論組時(shí)而造成服務(wù)器儲(chǔ)存和并發(fā)處理能力的加大問題,同時(shí)也減少討論組服務(wù)器開發(fā)時(shí)的運(yùn)營(yíng)成本。
為解決上述問題,本發(fā)明提供一種基于對(duì)等模式建立討論組的方法,包括步驟A、創(chuàng)建者客戶端獲取討論組的基本信息,所述基本信息包括討論組唯一標(biāo)識(shí)、討論組成員列表以及創(chuàng)建者的用戶標(biāo)識(shí);B、將所述討論組的基本信息組合到數(shù)據(jù)包中,所述數(shù)據(jù)包的消息類型為建立討論組的消息類型;C、遍歷討論組成員列表,逐一獲取討論組成員相應(yīng)的地址信息,并將其作為參數(shù)生成套接字接口,發(fā)送所述建立討論組的數(shù)據(jù)包;D、當(dāng)討論組成員的客戶端成功接收到客戶端討論組的數(shù)據(jù)包時(shí),在討論組成員的客戶端生成并顯示討論組條目,并向創(chuàng)建者客戶端反饋發(fā)送成功;E、討論組成員的客戶端建立討論組成功。
所述步驟A中創(chuàng)建者客戶端獲取包括::
21)創(chuàng)建者客戶端接收用戶創(chuàng)建討論組請(qǐng)求,獲取討論組成員信息;22)將所述討論組成員信息加入到討論組成員列表中;23)利用應(yīng)用程序接口的全球唯一標(biāo)識(shí)符生成函數(shù)生成所述討論組唯一標(biāo)識(shí)。
所述步驟A中創(chuàng)建者客戶端獲取還包括設(shè)置所述討論組的名稱。
所述步驟B中還包括將所述數(shù)據(jù)包按照約定的加密方式進(jìn)行加密。
所述步驟C中遍歷包括遍歷所述討論組成員列表,得到每個(gè)討論成員的用戶標(biāo)識(shí);所述步驟C中獲取包括根據(jù)所述用戶標(biāo)識(shí)查詢本地存儲(chǔ)文件;所述步驟C中生成包括利用底層相關(guān)套接字接口的應(yīng)用接口函數(shù),將所述地址信息作為參數(shù)。
所述步驟C還包括利用事件回調(diào)機(jī)制等待討論組成員消息的回復(fù)。
在步驟C和步驟D之間還包括通過事件回調(diào)機(jī)制判斷所述發(fā)送建立討論組的數(shù)據(jù)包是否超時(shí),若超時(shí),通過設(shè)置定時(shí)器在規(guī)定時(shí)間內(nèi)對(duì)所述數(shù)據(jù)包進(jìn)行重新發(fā)送,若在規(guī)定的時(shí)間內(nèi)沒有發(fā)送成功,則放棄。
所述步驟D的具體實(shí)現(xiàn)過程為D1、當(dāng)用戶在約定的套接字接口異步接收到數(shù)據(jù)包時(shí),判斷所述數(shù)據(jù)包是否是有效的數(shù)據(jù)包,若否,則繼續(xù)異步等待數(shù)據(jù)包;若是,按照約定的協(xié)議格式解析出所述數(shù)據(jù)包中的消息類型;D2、若所述消息類型是討論組建立的消息類型,則通過解析數(shù)據(jù)包獲得建立討論組的唯一標(biāo)識(shí)以及討論組成員列表;D3、根據(jù)所述討論組的唯一標(biāo)識(shí)查詢本地存儲(chǔ)文件中是否存在該討論組,若存在,則更新本地存儲(chǔ)文件中的原討論組成員列表;否則,在本地存儲(chǔ)文件中建立所述討論組的唯一標(biāo)識(shí)、討論組成員列表的數(shù)據(jù)結(jié)構(gòu);D4、生成討論組條目,并通知?jiǎng)?chuàng)建者客戶端討論組發(fā)送成功。
所述步驟D1中通過解密或解析的方式來判斷所述數(shù)據(jù)包是否為有效的數(shù)據(jù)包,其具體過程為客戶端對(duì)所述數(shù)據(jù)包進(jìn)行解密,若能成功解密,則所述數(shù)據(jù)包為有效數(shù)據(jù)包;或者客戶端對(duì)要解密的數(shù)據(jù)包按照約定的協(xié)議格式進(jìn)行解析,若能成功解析,則所述數(shù)據(jù)包為有效數(shù)據(jù)包。
所述步驟D2中通過解析所述數(shù)據(jù)包還獲得討論組的名稱。
所述方法還包括利用本地存儲(chǔ)文件保存所述建立成功討論組的數(shù)據(jù)結(jié)構(gòu),且所述討論組的數(shù)據(jù)結(jié)構(gòu)包括討論組唯一標(biāo)識(shí)、討論組名稱、創(chuàng)建者的用戶標(biāo)識(shí)以及加入討論組成員的討論組成員列表。
另外,本發(fā)明還提供一種基于對(duì)等模式的討論組的即時(shí)通信方法,所述方法包括步驟A、會(huì)話發(fā)起方獲取討論組的唯一標(biāo)識(shí);B、根據(jù)所述討論組的唯一標(biāo)識(shí)查詢討論組成員列表;C、遍歷所述討論組成員列表,獲取討論組成員的用戶標(biāo)識(shí),以及對(duì)應(yīng)該用戶標(biāo)識(shí)的地址信息,并生成套接字接口;D、設(shè)置發(fā)送數(shù)據(jù)包的消息類型為討論組消息,并將其與所述討論組的唯一標(biāo)識(shí)、成員用戶標(biāo)識(shí)、希望發(fā)送的消息內(nèi)容以及發(fā)送者的用戶標(biāo)識(shí)按照約定的格式進(jìn)行組包,通過套接字接口發(fā)送;E、對(duì)應(yīng)的成員客戶端在約定的套接字接口異步等待接收數(shù)據(jù)包,并對(duì)接收到的數(shù)據(jù)包按照約定的方式進(jìn)行解析;F、判斷所述發(fā)送者的用戶標(biāo)識(shí)是否存在于所述討論組唯一標(biāo)識(shí)所對(duì)應(yīng)的討論組中,若是,將該消息顯示在討論組的客戶端。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果本發(fā)明將現(xiàn)有技術(shù)中由服務(wù)器控制討論組的方式轉(zhuǎn)變?yōu)橐环N由客戶端控制討論組的處理方式,即基于對(duì)等模式的討論組。本發(fā)明提出的基于對(duì)等模式的討論組的技術(shù)實(shí)現(xiàn)方案,在沒有影響用戶使用討論組習(xí)慣的情況下,大大減少了服務(wù)器的存儲(chǔ)空間、并發(fā)處理以及負(fù)載等方面的壓力,利用這種對(duì)等模式的討論組,不再需要服務(wù)器參與討論組的建立,管理,消息轉(zhuǎn)發(fā),刪除等操作處理,全部由客戶端完成整個(gè)過程,這樣可以節(jié)省開發(fā)的成本開銷,適應(yīng)用戶對(duì)討論組逐漸增加的需求。
圖1是現(xiàn)有技術(shù)在服務(wù)器中建立討論組的方法的流程圖;圖2是本發(fā)明基于對(duì)等模式創(chuàng)建者客戶端建立討論組的方法的流程圖;圖3是基于對(duì)等模式討論組成員的客戶端處理討論組的方法的流程圖;
圖4是本發(fā)明基于對(duì)等模式的討論組的即時(shí)通信的方法的流程圖。
具體實(shí)施例方式
本發(fā)明的核心是當(dāng)某個(gè)討論組成員(創(chuàng)建者)希望發(fā)起會(huì)話時(shí),創(chuàng)建者建立討論組,以及希望加入討論組成員列表的數(shù)據(jù)結(jié)構(gòu),通過建立討論組的操作界面,可以設(shè)置新建討論組的名稱,以及將論組成員加入到討論組成員列表中,并生成討論組唯一標(biāo)識(shí);其次,將所述討論組唯一標(biāo)識(shí)、討論組名稱、討論組的成員列表以及創(chuàng)建者的用戶標(biāo)識(shí)按照約定的格式進(jìn)行組包操作,并將所述數(shù)據(jù)包設(shè)置為建立討論組的數(shù)據(jù)包;再次,通過遍歷所述討論組成員列表中每一個(gè)討論組成員的用戶標(biāo)識(shí),根據(jù)用戶標(biāo)識(shí)查詢本地存儲(chǔ)文件得到所述討論組成員的地址信息(即動(dòng)態(tài)IP地址和端口),并利用所述IP地址和端口為參數(shù)生成發(fā)送消息的套接字接口,來發(fā)送所述建立討論組的數(shù)據(jù)包;最后,如果建立討論組數(shù)據(jù)包發(fā)送成功,則查找該討論組中下一個(gè)討論組成員,執(zhí)行上述相同的步驟,直至將所有討論組成員都查找完,面板管理單元?jiǎng)t將生成相應(yīng)的討論組條目,以便于以后對(duì)討論組的管理和維護(hù),同時(shí)通過本地存儲(chǔ)文件存儲(chǔ)該討論組的基本信息,以及向所述創(chuàng)建者反饋發(fā)送成功的通知。
而當(dāng)客戶端接收到所述建立討論組的數(shù)據(jù)包時(shí),先判斷所述數(shù)據(jù)包是否時(shí)有效的數(shù)據(jù)包,若是,則通過約定的協(xié)議格式解析出所述數(shù)據(jù)數(shù)據(jù)包的消息類型,即若所述數(shù)據(jù)包的消息類型為建立數(shù)據(jù)包的消息類型,并解析出所述討論組唯一標(biāo)識(shí)、討論組名稱及討論組成員列表,并根據(jù)討論組唯一標(biāo)識(shí)來查詢本地存儲(chǔ)文件中是否存在該討論組,若存在,則更新所述討論組,否則,建立所述討論組唯一標(biāo)識(shí)、討論組名稱和討論組成員列表等討論組的基本信息,并保存。
本發(fā)明也就是將現(xiàn)有技術(shù)中由服務(wù)器來控制建立的討論組的處理方式轉(zhuǎn)變?yōu)橐环N由客戶端自己控制建立的討論組的處理方式。目前討論組的技術(shù)實(shí)現(xiàn)方案是以服務(wù)器為控制中心,由服務(wù)器負(fù)責(zé)討論組的建立、刪除、管理以及該組內(nèi)成員之間的即時(shí)通信。但是,隨著用戶數(shù)量以及建立的討論組的數(shù)量的逐漸增大,無論從存儲(chǔ)空間、并發(fā)處理以及負(fù)載方面都造成了對(duì)服務(wù)器的巨大壓力,因此,本發(fā)明提出了一種基于對(duì)等模式的創(chuàng)建討論組的技術(shù)實(shí)現(xiàn)方案,該方案中由各個(gè)客戶端對(duì)等的負(fù)責(zé)討論組的建立、控制、管理以及刪除討論組等操作,并且,上述操作都不通過服務(wù)器,也即是說這種方案把原來對(duì)服務(wù)器的各個(gè)壓力都分散到了客戶端, 可以極大滿足用戶對(duì)討論組的需求增多的要求,而本發(fā)明對(duì)用戶的表現(xiàn)形式與原來的界面操作界面一樣,只是內(nèi)部的處理過程進(jìn)行相應(yīng)的優(yōu)化,從而對(duì)于用戶來說將不會(huì)造成任何的影響,同時(shí)又降低了開發(fā)成本,極大的適應(yīng)了用戶對(duì)討論組增多的需求。
下面結(jié)合附圖,對(duì)本發(fā)明做進(jìn)一步的說明。
本發(fā)明所述基于對(duì)等模式的討論組的技術(shù)實(shí)現(xiàn)方案,主要包括兩部分內(nèi)容,一部分是基于對(duì)等模式建立討論組的過程,且所述建立討論組的過程又包括創(chuàng)建者客戶端建立討論組的過程以及討論組成員客戶端的建立討論組的過程。另一部分是基于對(duì)等模式的討論組的即時(shí)通信過程。下面分別對(duì)其進(jìn)行詳細(xì)的說明。
請(qǐng)參閱圖2,為本發(fā)明所述基于對(duì)等模式創(chuàng)建者建立討論組的方法的流程圖。所述方法包括步驟步驟S10創(chuàng)建者客戶端獲取討論組的基本信息,所述基本信息包括討論組唯一標(biāo)識(shí)、討論組成員列表以及創(chuàng)建者的用戶標(biāo)識(shí);步驟S11將所述討論組的基本信息組合到數(shù)據(jù)包中,所述數(shù)據(jù)包的消息類型為建立討論組的消息類型;步驟S12遍歷討論組成員列表,逐一獲取討論組成員相應(yīng)的地址信息,并將其作為參數(shù)生成套接字接口,發(fā)送所述建立討論組的數(shù)據(jù)包;步驟S13當(dāng)討論組成員的客戶端成功接收到客戶端討論組的數(shù)據(jù)包時(shí),在討論組成員的客戶端生成并顯示討論組條目,并向創(chuàng)建者客戶端反饋發(fā)送成功;步驟S14討論組成員的客戶端建立討論組成功。
當(dāng)某個(gè)用戶希望建立討論組,能夠進(jìn)行與多人會(huì)話時(shí),先通過IM軟件的討論組建立入口調(diào)出操作界面,用戶通過操作建立討論組的操作界面,同時(shí)建立用戶希望加入討論組的成員列表初始化的數(shù)據(jù)結(jié)構(gòu);用戶通過操作界面可以將新成員不斷添加到討論組成員列表中,同時(shí)也可以設(shè)置新建立討論組的名稱。所述設(shè)置討論組的名稱只是為了讓其他成員更好的來區(qū)分本討論組,如果只為討論組設(shè)置討論組的唯一標(biāo)識(shí)ID,在某些時(shí)候用戶并不能很好的區(qū)分,因此,設(shè)置討論組的名稱并不是必須的,但是,如果設(shè)置討論組的名稱,應(yīng)該優(yōu)先使用。
用戶通過界面操作將希望加入的討論組成員填充所述建立的討論組成員列表的數(shù)據(jù)結(jié)構(gòu)中。并利用Windows底層應(yīng)用程序接口(API,Application Program Interface)的全球唯一標(biāo)識(shí)符(GUID,Global UniqueIdentifier)生成函數(shù)生成討論組的唯一標(biāo)識(shí)ID。本發(fā)明所述的討論組的唯一標(biāo)識(shí)與現(xiàn)有技術(shù)中的討論組的唯一標(biāo)識(shí)的生成過程不同所述現(xiàn)有技術(shù)的生成過程為在服務(wù)器中由于采用數(shù)據(jù)庫系統(tǒng),因此討論組的ID是數(shù)據(jù)庫中數(shù)據(jù)表的主鍵,是數(shù)據(jù)庫中自動(dòng)根據(jù)已經(jīng)有的數(shù)據(jù)項(xiàng)自動(dòng)生成的。比如,討論組數(shù)據(jù)表中的討論組唯一標(biāo)識(shí)已經(jīng)有100行了,現(xiàn)在用戶又要申請(qǐng)?jiān)賱?chuàng)建一個(gè)討論組唯一標(biāo)識(shí)時(shí),則所述數(shù)據(jù)庫系統(tǒng)會(huì)在成功寫入數(shù)據(jù)表之后返回討論組唯一標(biāo)識(shí)ID為101。而本發(fā)明所述討論組唯一標(biāo)識(shí)的生成過程卻沒有數(shù)據(jù)庫的支持,因此采用Windows的底層應(yīng)用程序接口API函數(shù)CreateGUID生成。所述生成討論組的唯一標(biāo)識(shí)的目的是方便用戶在本地存儲(chǔ)中管理討論組,同時(shí)也可以避免出討論組ID不唯一的情況。
創(chuàng)建者的客戶端將討論組的基本信息,即討論組的唯一標(biāo)識(shí)ID、討論組名稱、討論組的成員列表和創(chuàng)建者的用戶標(biāo)識(shí)等這些字段按約定的格式組合到協(xié)議數(shù)據(jù)包中,其中,所述約定的協(xié)議格式是事先由接收方與發(fā)送方共同約定的,也就是說,所述協(xié)議格式也就是數(shù)據(jù)包的組包格式,一般數(shù)據(jù)包包括包頭、包體和包尾。所述包頭中包括一些協(xié)議命令號(hào)、子命令號(hào)等等;所述包體包括所述數(shù)據(jù)包的內(nèi)容,比如,如果本發(fā)明所述的數(shù)據(jù)包中包括了討論組的唯一標(biāo)識(shí)ID、消息類型、討論組成員列表等等;所述包尾包括一些數(shù)據(jù)包結(jié)束符等等。并設(shè)置該數(shù)據(jù)包的消息類型為建立討論組的消息類型,并利用約定的加密算法對(duì)數(shù)據(jù)包進(jìn)行加密。其實(shí),本發(fā)明所述的加密算法只是對(duì)所發(fā)送的數(shù)據(jù)進(jìn)行保密,主要是考慮所發(fā)送的數(shù)據(jù)包的安全性,在該過程中不對(duì)數(shù)據(jù)包進(jìn)行加密直接進(jìn)行發(fā)送也是可以的。因此所述的加密算法是普通的加密算法,這對(duì)于本領(lǐng)域的普通技術(shù)人員來說是公知技術(shù),在這里不再贅述。
遍歷填充的討論組成員列表的數(shù)據(jù)結(jié)構(gòu),得到每個(gè)討論組成員的Uin號(hào)碼,即用戶標(biāo)識(shí),根據(jù)所述用戶標(biāo)識(shí)查詢本地存儲(chǔ)文件,獲得本地存儲(chǔ)文件中對(duì)應(yīng)該討論組成員的地址信息,所述地址信息包括動(dòng)態(tài)IP地址以及PORT端口。其中,所述遍歷的方式有兩種一種是采用逐一遍歷的方式,即先查找一個(gè)討論組成員的用戶標(biāo)識(shí),獲得其對(duì)應(yīng)的地址信息后,再查找下一個(gè)討論組成員,獲得其對(duì)應(yīng)的地址信息后,繼續(xù)查找下一個(gè)討論組成員,直至所有的討論組成員都查找完;另一種是先查找所有討論組成員的用戶標(biāo)識(shí),再分別根據(jù)用戶標(biāo)識(shí)得到該討論組成員的地址信息。但二者的實(shí)現(xiàn)原理基本相同,其實(shí)現(xiàn)原理對(duì)于本領(lǐng)的技術(shù)人來來說,都是公知及時(shí),因此在這里不再贅述。而所述本地存儲(chǔ)文件包括對(duì)應(yīng)該用戶的基本資料信息,比如討論組成員的呢稱、聯(lián)系方式、年齡等等;動(dòng)態(tài)資料信息,比如狀態(tài)、IP地址以及PORT端口等等。在該本地存儲(chǔ)文件中是以用戶標(biāo)志為關(guān)鍵字進(jìn)行組織的,因此通過用戶標(biāo)識(shí)即可查找到。并將所獲得的IP地址與PORT作為參數(shù)通過Windows底層相關(guān)的套接字API函數(shù)CreateSocket生成套接字接口,并發(fā)送所述建立討論組的經(jīng)過加密的協(xié)議數(shù)據(jù)包,同時(shí)利用事件回調(diào)機(jī)制等待成員的返回消息。所謂事件回調(diào)機(jī)制指的是發(fā)送方對(duì)某個(gè)接收方發(fā)送了某個(gè)事件后,發(fā)送方不需要同步等待接收方的返回,而是繼續(xù)進(jìn)行其他的處理工作,接收方會(huì)主動(dòng)調(diào)用發(fā)送方的回調(diào)接口,向發(fā)送方返回消息。利用事件回調(diào)機(jī)制可以實(shí)現(xiàn)事件的異步處理,從而提高處理效率。其中,所述討論組成員返回消息的內(nèi)容就是一個(gè)已經(jīng)成功接收到創(chuàng)建者的數(shù)據(jù)包的通知消息,該消息是在討論組成員成功解析完數(shù)據(jù)包之后即可反饋。
此外,通過事件回調(diào)機(jī)制還可以判斷所述發(fā)送的建立討論組的協(xié)議數(shù)據(jù)包是否超時(shí),如果超時(shí),則會(huì)啟動(dòng)定時(shí)器,在設(shè)定的時(shí)間(比如設(shè)置為4分鐘)內(nèi)對(duì)數(shù)據(jù)包進(jìn)行重新發(fā)送,如過在設(shè)定的時(shí)間內(nèi)還沒有發(fā)送成功,則放棄發(fā)送。如果建立討論組的協(xié)議數(shù)據(jù)包發(fā)送成功或在設(shè)定的時(shí)間內(nèi)發(fā)送成功,則提取出下一個(gè)討論組成員,重復(fù)遍歷已加入討論組成員的討論組成員列表的數(shù)據(jù)結(jié)構(gòu),直到該討論組列表遍歷完畢。
當(dāng)討論組成員的客戶端成功接收到討論組的數(shù)據(jù)包時(shí),通過面板管理模塊生成對(duì)應(yīng)該討論組的條目Item,并顯示在主機(jī)顯示器上,同時(shí)利用對(duì)話框提示該創(chuàng)建者用戶,討論組已經(jīng)建立成功,并利用本地存儲(chǔ)模塊保存該討論組的數(shù)據(jù)結(jié)構(gòu)到本地中,以便于后續(xù)管理與維護(hù)。所述本地存儲(chǔ)模塊可以存儲(chǔ)很多種數(shù)據(jù)結(jié)構(gòu),比如討論組的數(shù)據(jù)結(jié)構(gòu)、群組的數(shù)據(jù)結(jié)構(gòu)、好友的數(shù)據(jù)結(jié)構(gòu)、陌生人的數(shù)據(jù)結(jié)構(gòu)和消息記錄的數(shù)據(jù)結(jié)構(gòu)等等,該本地存儲(chǔ)模塊主要負(fù)責(zé)與本地存儲(chǔ)文件的保存,提取以及修改等操作。但是本發(fā)明所述數(shù)據(jù)結(jié)構(gòu)主要就是討論組的數(shù)據(jù)結(jié)構(gòu),包括討論組的唯一標(biāo)識(shí)ID、討論組名稱、創(chuàng)建者用戶標(biāo)識(shí)、討論組成員列表等。
還請(qǐng)參考圖3,為本發(fā)明所述基于對(duì)等模式討論組成員的客戶端處理討論組的方法的流程圖,所述方法包括步驟N10當(dāng)用戶在約定的套接字接口異步接收到數(shù)據(jù)包時(shí),判斷所述數(shù)據(jù)包是否是有效的數(shù)據(jù)包,若否,則繼續(xù)異步等待數(shù)據(jù)包(步驟N11),結(jié)束;若是,按照約定的協(xié)議格式解析出所述數(shù)據(jù)包中的消息類型步驟(N12);步驟N13判斷所述消息類型是否是討論組建立的消息類型,若是,則通過解析數(shù)據(jù)包獲得建立討論組的唯一標(biāo)識(shí)以及討論組成員列表(步驟N14);否則,則按所述消息的類型進(jìn)行相應(yīng)的處理,結(jié)束(N15);步驟N16根據(jù)所述討論組的唯一標(biāo)識(shí)查詢本地存儲(chǔ)文件中是否存在該討論組,若存在,則更新本地存儲(chǔ)文件中的原討論組成員列表(N17);否則,在本地存儲(chǔ)文件中建立所述討論組的唯一標(biāo)識(shí)、討論組成員列表的數(shù)據(jù)結(jié)構(gòu)(N18);步驟N19生成討論組條目,并通知?jiǎng)?chuàng)建者討論組發(fā)送成功。
用戶在約定的接收消息的套接字接口上異步等待數(shù)據(jù)包的到來。當(dāng)客戶端接收到數(shù)據(jù)包時(shí),對(duì)接收到的數(shù)據(jù)包按照約定的解密算法進(jìn)行解密處理以及對(duì)數(shù)據(jù)包的解析操作。然后判斷所述數(shù)據(jù)包是否是有效的數(shù)據(jù)包,其判斷過程為首先,如果能對(duì)所述數(shù)據(jù)包進(jìn)行解密,則可以認(rèn)為所述數(shù)據(jù)包有效;其次,是對(duì)解密的數(shù)據(jù)包按照約定的協(xié)議格式進(jìn)行解析,如果所述數(shù)據(jù)包的包頭、包體與包尾能夠成功解析,則所述所述數(shù)據(jù)包為有效的數(shù)據(jù)包,否則,則說明所述數(shù)據(jù)包是偽造的數(shù)據(jù)包。對(duì)于無效的數(shù)據(jù)包,直接丟棄,并繼續(xù)在接收消息的套接字接口中進(jìn)行異步等待。
其中,對(duì)于有效的數(shù)據(jù)包,則按照約定協(xié)議格式解析出該數(shù)據(jù)包中的消息類型的字段,并判斷該消息類型的字段是否是建立討論組消息類型,如果不是,則按照原來的消息類型的處理函數(shù)進(jìn)行后續(xù)的處理操作。比如所述消息的類型為系統(tǒng)消息、群消息、好友消息、通告消息等等;如果是討論組的建立消息類型,則通過數(shù)據(jù)包解析出創(chuàng)建討論組的唯一標(biāo)識(shí)ID、討論組名稱、討論組成員列表以及討論組的創(chuàng)建者用戶標(biāo)識(shí)。并根據(jù)所述數(shù)據(jù)包解析出來的討論組唯一標(biāo)識(shí)ID查詢本地文件存儲(chǔ)模塊,判斷該討論組是否已經(jīng)存在,如果該討論組存在,則通過本地文件存儲(chǔ)模塊提取出原來的討論組所有的相關(guān)信息,所述相關(guān)信息包括討論組的名稱,討論組的成員列表以及討論組的創(chuàng)建者用戶標(biāo)識(shí),利用數(shù)據(jù)包解析出來的各個(gè)字段進(jìn)行替換更新處理;否則,如果該討論組不存在,則建立討論組,其中所述討論組的內(nèi)容包括討論組唯一標(biāo)識(shí)ID、討論組名稱以及討論組成員列表、討論組創(chuàng)建者用戶標(biāo)識(shí)等字段的數(shù)據(jù)結(jié)構(gòu),并利用解析出的相應(yīng)的數(shù)據(jù)字段進(jìn)行數(shù)據(jù)結(jié)構(gòu)的填充處理。
最后,利用本地文本存儲(chǔ)模塊新建的討論組的數(shù)據(jù)結(jié)構(gòu)進(jìn)行保存,以便用戶后續(xù)對(duì)該討論組的維護(hù)與管理等操作,同時(shí)利用面板管理模塊根據(jù)當(dāng)前的討論組信息進(jìn)行更新處理,對(duì)于原來已經(jīng)存在的討論組,根據(jù)需要更新面板與討論組成員列表;如果原來不存在,則重新生成討論組對(duì)應(yīng)的面板條目Item,并提示用戶新討論組建立成功。
另外,本發(fā)明所述創(chuàng)建者還可以增加或刪除討論組成員,且所述討論組創(chuàng)建者增加與刪除討論組成員的過程為創(chuàng)建者把該討論組成員的用戶標(biāo)識(shí)以及討論組的唯一標(biāo)識(shí)ID組合到增加或者刪除討論組成員的討論組消息類型的數(shù)據(jù)包中,根據(jù)討論組成員列表進(jìn)行消息發(fā)送,討論組其他成員接收到該消息數(shù)據(jù)包,解析出需要增加或者刪除的討論組成員的用戶標(biāo)識(shí),然后利用本地存儲(chǔ)模塊更新本地文件存儲(chǔ)以及面板。
當(dāng)討論組討論完后,創(chuàng)建者組合討論組唯一標(biāo)識(shí)ID到數(shù)據(jù)包中,根據(jù)討論組成員列表,發(fā)送帶有解散討論組的討論組消息類型的數(shù)據(jù)包,當(dāng)其他成員收到該數(shù)據(jù)包時(shí),解析出該數(shù)據(jù)包中的消息類型,根據(jù)討論組唯一標(biāo)識(shí)ID刪除本地文件存儲(chǔ)中的數(shù)據(jù)結(jié)構(gòu)以及通過面板模塊刪除該討論組條目ITEM,從而實(shí)現(xiàn)討論組討論完畢后的解散過程、當(dāng)討論組的創(chuàng)建者以及討論組的所有成員都在主面板上具有了討論組的表現(xiàn)形式以及討論組的本地文件存儲(chǔ)后。就可以利用該建立的討論組進(jìn)行多人之間的即時(shí)通信,其中所述基于對(duì)等模式的討論組的即時(shí)通信方法,即的流程圖詳見圖4,所述方法包括步驟H10會(huì)話發(fā)起方獲取討論組的唯一標(biāo)識(shí);步驟H11根據(jù)所述討論組的唯一標(biāo)識(shí)查詢討論組成員列表;步驟H12遍歷所述討論組成員列表,獲取討論組成員的用戶標(biāo)識(shí),以及對(duì)應(yīng)該用戶標(biāo)識(shí)的地址信息,并生成套接字接口;步驟H13設(shè)置發(fā)送數(shù)據(jù)包的消息類型為討論組消息,并將其與所述討論組的唯一標(biāo)識(shí)、成員用戶標(biāo)識(shí)、希望發(fā)送的消息內(nèi)容以及發(fā)送者的用戶標(biāo)識(shí)按照約定的格式進(jìn)行組包,通過套接字接口發(fā)送;步驟H14對(duì)應(yīng)的成員客戶端在約定的套接字接口異步等待接收數(shù)據(jù)包,并對(duì)接收到的數(shù)據(jù)包按照約定的方式進(jìn)行解析;步驟H15判斷所述發(fā)送者的用戶標(biāo)識(shí)是否存在于所述討論組唯一標(biāo)識(shí)所對(duì)應(yīng)的討論組中,若是,將該消息顯示在討論組的客戶端(H16)。
當(dāng)某個(gè)討論組成員希望發(fā)起會(huì)話,該客戶端獲取用戶希望展開會(huì)話的討論組的唯一標(biāo)識(shí)ID,通過該唯一標(biāo)識(shí)ID利用本地文件存儲(chǔ)模塊查詢獲取對(duì)應(yīng)該討論組所有成員列表,并把所有成員(包括討論發(fā)起會(huì)話的成員)加入到建立的討論組成員列表中??蛻舳塑浖闅v加入討論組成員的討論組成員列表,提取所述討論組成員的用戶標(biāo)識(shí)UIN,通過該用戶標(biāo)識(shí)UIN,查詢本地存儲(chǔ)模塊中對(duì)應(yīng)該用戶標(biāo)識(shí)UIN的動(dòng)態(tài)用戶IP地址以及PORT端口,并將所述用戶IP地址和PORT端口為參數(shù)生成UDP發(fā)送套接字接口。
創(chuàng)建者設(shè)置消息類型字段為建立討論組的消息類型,把討論組唯一ID,討論組成員的用戶標(biāo)識(shí)UIN,希望發(fā)送的消息內(nèi)容,以及創(chuàng)建者或發(fā)送者的用戶標(biāo)識(shí)UIN,消息類型等按照約定的協(xié)議格式組包到數(shù)據(jù)包中,并按照約定的加密算法進(jìn)行加密處理,并將加密后的數(shù)據(jù)包通過套接字接口發(fā)送出去,對(duì)應(yīng)的討論組成員客戶端在約定的套接字接口異步等待接收數(shù)據(jù)包,并對(duì)接收到的數(shù)據(jù)包按照約定的算法進(jìn)行解密,且按照約定的協(xié)議格式進(jìn)行數(shù)據(jù)包的解析;來判斷所述數(shù)據(jù)包是否是有效的數(shù)據(jù)包,如果不是,則直接丟棄該數(shù)據(jù)包;如果是,則按照協(xié)議格式提取出該數(shù)據(jù)包中的消息類型字段,并判斷,如果所述消息類型是非討論組消息,則按照原來的消息類型進(jìn)行處理,而如果是建立討論組消息類型,則利用解析出來的創(chuàng)建者或發(fā)送者的用戶標(biāo)識(shí)UIN以及討論組唯一標(biāo)識(shí)ID,查詢本地文件儲(chǔ)存模塊,判斷所述創(chuàng)建者或發(fā)送者的用戶標(biāo)識(shí)UIN是否是討論組成員,如果不是討論組成員,則直接丟棄該討論組消息;如果創(chuàng)建者或發(fā)送者存在于該用戶的討論組唯一標(biāo)識(shí)ID對(duì)應(yīng)的討論組中,則調(diào)用消息顯示模塊,并利用討論組模塊調(diào)出討論組顯示模塊,把該消息顯示在討論組的IM聊天窗口中。然后創(chuàng)建者或發(fā)送者重新遍歷論組成員列表,并重復(fù)執(zhí)行上述實(shí)現(xiàn)過程,直到所有的討論組成員遍歷完畢。
由此可見,采用本發(fā)明所述方法,在討論組成員中進(jìn)行多人會(huì)話時(shí),利用遍歷討論組成員列表,通過發(fā)送帶有建立討論組消息類型的數(shù)據(jù)包,并對(duì)該討論組中的每個(gè)成員進(jìn)行點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)發(fā)送,不再通過服務(wù)器進(jìn)行操作處理,即建立、管理、消息轉(zhuǎn)發(fā)和刪除等操作處理,從而大大節(jié)省了開發(fā)成本,極大的適應(yīng)了用戶對(duì)討論組逐漸增加的需求。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種基于對(duì)等模式建立討論組的方法,其特征在于,包括A、創(chuàng)建者客戶端獲取討論組的基本信息,所述基本信息包括討論組唯一標(biāo)識(shí)、討論組成員列表以及創(chuàng)建者的用戶標(biāo)識(shí);B、將所述討論組的基本信息組合到數(shù)據(jù)包中,所述數(shù)據(jù)包的消息類型為建立討論組的消息類型;C、遍歷討論組成員列表,逐一獲取討論組成員相應(yīng)的地址信息,并將其作為參數(shù)生成套接字接口,發(fā)送所述建立討論組的數(shù)據(jù)包;D、當(dāng)討論組成員的客戶端成功接收到客戶端討論組的數(shù)據(jù)包時(shí),在討論組成員的客戶端生成并顯示討論組條目,并向創(chuàng)建者客戶端反饋發(fā)送成功;E、討論組成員的客戶端建立討論組成功。
2.根據(jù)權(quán)利要求1所述基于對(duì)等模式建立討論組的方法,其特征在于,所述步驟A中創(chuàng)建者客戶端獲取包括21)創(chuàng)建者客戶端接收用戶創(chuàng)建討論組請(qǐng)求,獲取討論組成員信息;22)將所述討論組成員信息加入到討論組成員列表中;23)利用應(yīng)用程序接口的全球唯一標(biāo)識(shí)符生成函數(shù)生成所述討論組唯一標(biāo)識(shí)。
3.根據(jù)權(quán)利要求2所述基于對(duì)等模式建立討論組的方法,其特征在于,所述步驟A中創(chuàng)建者客戶端獲取還包括設(shè)置所述討論組的名稱。
4.根據(jù)權(quán)利要求1所述基于對(duì)等模式建立討論組的方法,其特征在于,步驟B中還包括將所述數(shù)據(jù)包按照約定的加密方式進(jìn)行加密。
5.根據(jù)權(quán)利要求1所述基于對(duì)等模式建立討論組的方法,其特征在于,所述步驟C中遍歷包括遍歷所述討論組成員列表,得到每個(gè)討論成員的用戶標(biāo)識(shí);所述步驟C中獲取包括根據(jù)所述用戶標(biāo)識(shí)查詢本地存儲(chǔ)文件;所述步驟C中生成包括利用底層相關(guān)套接字接口的應(yīng)用接口函數(shù),將所述地址信息作為參數(shù)。
6.根據(jù)權(quán)利要求5所述基于對(duì)等模式建立討論組的方法,其特征在于,所述步驟C還包括利用事件回調(diào)機(jī)制等待討論組成員消息的回復(fù)。
7.根據(jù)權(quán)利要求6所述基于對(duì)等模式建立討論組的方法,其特征在于,在步驟C和步驟D之間包括通過事件回調(diào)機(jī)制判斷所述發(fā)送建立討論組的數(shù)據(jù)包是否超時(shí),若超時(shí),通過設(shè)置定時(shí)器在規(guī)定時(shí)間內(nèi)對(duì)所述數(shù)據(jù)包進(jìn)行重新發(fā)送,若在規(guī)定的時(shí)間內(nèi)沒有發(fā)送成功,則放棄。
8.根據(jù)權(quán)利要求1所述基于對(duì)等模式建立討論組的方法,其特征在于,所述步驟D的具體實(shí)現(xiàn)過程為D1、當(dāng)用戶在約定的套接字接口異步接收到數(shù)據(jù)包時(shí),判斷所述數(shù)據(jù)包是否是有效的數(shù)據(jù)包,若否,則繼續(xù)異步等待數(shù)據(jù)包;若是,按照約定的協(xié)議格式解析出所述數(shù)據(jù)包中的消息類型;D2、若所述消息類型是討論組建立的消息類型,則通過解析數(shù)據(jù)包獲得建立討論組的唯一標(biāo)識(shí)以及討論組成員列表;D3、根據(jù)所述討論組的唯一標(biāo)識(shí)查詢本地存儲(chǔ)文件中是否存在該討論組,若存在,則更新本地存儲(chǔ)文件中的原討論組成員列表;否則,在本地存儲(chǔ)文件中建立所述討論組的唯一標(biāo)識(shí)、討論組成員列表的數(shù)據(jù)結(jié)構(gòu);D4、生成討論組條目,并通知?jiǎng)?chuàng)建者客戶端討論組發(fā)送成功。
9.根據(jù)權(quán)利要求8所述討論組成員用戶端的方法,其特征在于,所述步驟D1中通過解密或解析的方式來判斷所述數(shù)據(jù)包是否為有效的數(shù)據(jù)包,其具體過程為客戶端對(duì)所述數(shù)據(jù)包進(jìn)行解密,若能成功解密,則所述數(shù)據(jù)包為有效數(shù)據(jù)包;或者客戶端對(duì)要解密的數(shù)據(jù)包按照約定的協(xié)議格式進(jìn)行解析,若能成功解析,則所述數(shù)據(jù)包為有效數(shù)據(jù)包。
10.根據(jù)權(quán)利要求8所述討論組成員用戶端的方法,其特征在于,步驟D2中通過解析所述數(shù)據(jù)包還獲得討論組的名稱。
11.根據(jù)權(quán)利要求1所述基于對(duì)等模式建立討論組的方法,其特征在于,所述方法還包括利用本地存儲(chǔ)文件保存所述建立成功討論組的數(shù)據(jù)結(jié)構(gòu),且所述討論組的數(shù)據(jù)結(jié)構(gòu)包括討論組唯一標(biāo)識(shí)、討論組名稱、創(chuàng)建者的用戶標(biāo)識(shí)以及加入討論組成員的討論組成員列表。
12,一種基于對(duì)等模式的討論組的即時(shí)通信方法,其特征在于,包括A、會(huì)話發(fā)起方獲取討論組的唯一標(biāo)識(shí);B、根據(jù)所述討論組的唯一標(biāo)識(shí)查詢討論組成員列表;C、遍歷所述討論組成員列表,獲取討論組成員的用戶標(biāo)識(shí),以及對(duì)應(yīng)該用戶標(biāo)識(shí)的地址信息,并生成套接字接口;D、設(shè)置發(fā)送數(shù)據(jù)包的消息類型為討論組消息,并將其與所述討論組的唯一標(biāo)識(shí)、成員用戶標(biāo)識(shí)、希望發(fā)送的消息內(nèi)容以及發(fā)送者的用戶標(biāo)識(shí)按照約定的格式進(jìn)行組包,通過套接字接口發(fā)送;E、對(duì)應(yīng)的成員客戶端在約定的套接字接口異步等待接收數(shù)據(jù)包,并對(duì)接收到的數(shù)據(jù)包按照約定的方式進(jìn)行解析;F、判斷所述發(fā)送者的用戶標(biāo)識(shí)是否存在于所述討論組唯一標(biāo)識(shí)所對(duì)應(yīng)的討論組中,若是,將該消息顯示在討論組的客戶端。
全文摘要
本發(fā)明涉及一種基于對(duì)等模式建立討論組的方法,包括A.創(chuàng)建者客戶端獲取討論組的基本信息,該基本信息包括討論組唯一標(biāo)識(shí)、討論組成員列表以及創(chuàng)建者的用戶標(biāo)識(shí);B.將討論組的基本信息組合到數(shù)據(jù)包中,該數(shù)據(jù)包的消息類型為建立討論組的消息類型;C.遍歷討論組成員列表,逐一獲取討論組成員相應(yīng)的地址信息,并將其作為參數(shù)生成套接字接口,發(fā)送所述建立討論組的數(shù)據(jù)包;D.當(dāng)討論組成員的客戶端成功接收到客戶端討論組的數(shù)據(jù)包時(shí),在討論組成員的客戶端生成并顯示討論組條目,并向創(chuàng)建者客戶端反饋發(fā)送成功;E.討論組成員的客戶端建立討論組成功。以解決現(xiàn)有技術(shù)中服務(wù)器建立、管理以及刪除討論組而造成服務(wù)器處理能力加大的問題。
文檔編號(hào)H04L12/18GK1956386SQ20051010083
公開日2007年5月2日 申請(qǐng)日期2005年10月26日 優(yōu)先權(quán)日2005年10月26日
發(fā)明者李斌 申請(qǐng)人:騰訊科技(深圳)有限公司