两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng)的制作方法

文檔序號(hào):7902556閱讀:392來(lái)源:國(guó)知局
專利名稱:在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng)的制作方法
技術(shù)領(lǐng)域
本實(shí)用新型涉及一種運(yùn)行于手機(jī)設(shè)備上的中間件系統(tǒng),更具體地說(shuō)是涉及移動(dòng)手 機(jī)組成的分布式環(huán)境下的計(jì)算機(jī)軟件系統(tǒng)。
背景技術(shù)
有線網(wǎng)絡(luò),又稱固定網(wǎng)絡(luò),即由一系列固定的主機(jī),通過(guò)高帶寬的網(wǎng)線及組網(wǎng)設(shè)備 連接在一起從而組成的相對(duì)持久的物理網(wǎng)絡(luò)。這樣的運(yùn)行環(huán)境要求分布式應(yīng)用程序考慮 (1)可擴(kuò)展性,是指在未來(lái)一段時(shí)間內(nèi)可以容納更高負(fù)載的能力;( 開(kāi)放性,指的是可以 在功能需求變化時(shí),更容易的擴(kuò)展和修改系統(tǒng);(3)異構(gòu)性,是指分布式系統(tǒng)中被集成的不 同組件是由不同的程序語(yǔ)言編寫(xiě)的,運(yùn)行的不同的操作系統(tǒng)之上,并且又是在不同的硬件 平臺(tái)上執(zhí)行;(4)容錯(cuò)性,指的是在系統(tǒng)出錯(cuò)時(shí),能夠在不停止整個(gè)系統(tǒng)運(yùn)行的情況下自動(dòng) 恢復(fù);(5)資源共享和訪問(wèn)控制,即硬件和軟件資源都可以為不同系統(tǒng)的用戶有條件地 共享。中間件就是為了解決這些問(wèn)題而產(chǎn)生的,它處于網(wǎng)絡(luò)操作系統(tǒng)之上,對(duì)開(kāi)發(fā)者隱藏了 分布式系統(tǒng)的復(fù)雜性,成功應(yīng)有于固定網(wǎng)絡(luò)環(huán)境下的中間件系統(tǒng)有OMG CORBA、Microsoft COM、Sun Java/RMI 以及 IBM MQSeries 等。近年來(lái)由于PDA、手機(jī)、筆記本電腦等移動(dòng)設(shè)備的普及,以及無(wú)線網(wǎng)絡(luò)的迅猛發(fā)展, 移動(dòng)應(yīng)用正在不斷接近人們的工作生活。由于設(shè)備的移動(dòng)性、資源受限,移動(dòng)無(wú)線網(wǎng)絡(luò)不同 于傳統(tǒng)的固定網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)不固定,網(wǎng)絡(luò)連接性較差。再加上移動(dòng)設(shè)備的計(jì)算能力有限, 設(shè)備異構(gòu)性強(qiáng),固定網(wǎng)絡(luò)上中間件系統(tǒng)完全不適合移動(dòng)無(wú)線網(wǎng)絡(luò),所以一種適合移動(dòng)設(shè)備 的中間件系統(tǒng)急需被研制。并且隨著手機(jī)服務(wù)器及手機(jī)設(shè)備系統(tǒng)的日趨成熟(如已知的暢力源手機(jī)服務(wù)器 等等),為在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件的系統(tǒng)成為可能。
發(fā)明內(nèi)容本實(shí)用新型針對(duì)以上問(wèn)題的提出,而研制一套能夠運(yùn)行于手機(jī)設(shè)備上的移動(dòng)消息 中間件系統(tǒng)。本實(shí)用新型采用的技術(shù)手段如下—種在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng),其特征在于該系統(tǒng)應(yīng)用于至少一 個(gè)服務(wù)器端和兩個(gè)以上運(yùn)行于手機(jī)設(shè)備的客戶端組成的系統(tǒng)中;所述客戶端包括客戶端項(xiàng)目管理單元,用于用戶編輯消息,配置通信對(duì)象以及通信方式參數(shù);客戶端消息轉(zhuǎn)換單元,用于將用戶編輯的消息轉(zhuǎn)換成XML格式的消息,并將此消 息繼續(xù)轉(zhuǎn)換成樹(shù)的形式;客戶端緩存單元,用于存儲(chǔ)用戶本地的數(shù)據(jù),使用戶可以離線的對(duì)數(shù)據(jù)進(jìn)行操作 修改,并將客戶端經(jīng)常訪問(wèn)的服務(wù)器端的數(shù)據(jù)存儲(chǔ)在本地;客戶端通信單元,用于使用戶同其他客戶端或服務(wù)器進(jìn)行通信;[0013]客戶端DOM操作單元,用于對(duì)XML格式的樹(shù)形結(jié)構(gòu)的消息進(jìn)行添加和修改操作,并 對(duì)其他終端發(fā)送過(guò)來(lái)的消息進(jìn)行解析;客戶端消解策略單元,用于對(duì)消息轉(zhuǎn)換單元轉(zhuǎn)換成樹(shù)形式的消息中的沖突節(jié)點(diǎn)定 義沖突解決策略;客戶端沖突消解單元,用于調(diào)用客戶端DOM操作單元對(duì)XML消息進(jìn)行處理,之后調(diào) 用所述客戶端消解策略單元,按照事先定義的沖突消解策略來(lái)解決沖突;顯示單元,用于將結(jié)果顯示給用戶;服務(wù)器端具有服務(wù)器端消息隊(duì)列管理單元,用于對(duì)服務(wù)器的消息進(jìn)行管理,并控制服務(wù)器同其 他終端之間進(jìn)行收發(fā)消息;服務(wù)器端存儲(chǔ)單元,用于將消息存儲(chǔ)在數(shù)據(jù)庫(kù)中;服務(wù)器端通信單元,用于使該服務(wù)器與其他客戶端或服務(wù)器進(jìn)行通信;服務(wù)器端消解策略單元,用于對(duì)樹(shù)形式的消息中的沖突節(jié)點(diǎn)定義沖突解決策略;服務(wù)器端DOM操作單元,用于對(duì)XML格式的樹(shù)形結(jié)構(gòu)的消息進(jìn)行添加和修改操作, 并對(duì)其他終端發(fā)送過(guò)來(lái)的消息進(jìn)行解析;服務(wù)器端沖突消解單元,用于調(diào)用服務(wù)器端DOM操作單元對(duì)XML消息進(jìn)行處理,之 后調(diào)用所述服務(wù)器端消解策略單元,按照事先定義的沖突消解策略來(lái)解決沖突;所述中間件系統(tǒng)的一個(gè)客戶端作為消息的發(fā)送方,其客戶端消息轉(zhuǎn)換單元在收 到用戶利用該客戶端項(xiàng)目管理單元編輯的消息后,將此消息轉(zhuǎn)換成XML格式,然后利用客 戶端消解策略單元為可能會(huì)產(chǎn)生沖突的節(jié)點(diǎn)添加沖突解決策略,再通過(guò)客戶端通信單元向 外發(fā)送消息;由服務(wù)器端或者是另一個(gè)客戶端接收消息,服務(wù)器端或者是另一個(gè)客戶端的 DOM操作單元對(duì)消息進(jìn)行相關(guān)DOM操作,即接收方DOM操作單元對(duì)兩個(gè)不同的樹(shù)型結(jié)構(gòu)的 XML消息進(jìn)行比較,產(chǎn)生diff樹(shù),以記錄著由兩個(gè)不同消息所產(chǎn)生的沖突;然后接收方中的 沖突消解單元對(duì)沖突進(jìn)行消解,產(chǎn)生一個(gè)沒(méi)有沖突的新樹(shù),再將此樹(shù)發(fā)送給發(fā)送方;如果此 過(guò)程發(fā)生在兩個(gè)移動(dòng)客戶端之間,則將結(jié)果存儲(chǔ)于所述的客戶端緩存單元中,并交由所述 的顯示單元顯示;如果此過(guò)程發(fā)生在移動(dòng)客戶端與服務(wù)器之間,則服務(wù)器將此消息保存在 服務(wù)器端存儲(chǔ)單元的數(shù)據(jù)庫(kù)中,并由所述的服務(wù)器端消息隊(duì)列管理單元將此消息通過(guò)服務(wù) 器端通信單元發(fā)送給所有訂閱者。本實(shí)用新型提供的在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng)及工作方法同現(xiàn)有 技術(shù)相比其優(yōu)點(diǎn)是顯而易見(jiàn)的,具體如下(1)使消息中間件支持移動(dòng)分布式環(huán)境。區(qū)別于傳統(tǒng)消息中間件,本實(shí)用新型支持 移動(dòng)網(wǎng)絡(luò)環(huán)境,針對(duì)移動(dòng)網(wǎng)絡(luò)的特殊性和手機(jī)設(shè)備的特點(diǎn),能夠在手機(jī)設(shè)備真實(shí)的硬件環(huán) 境和Java虛擬運(yùn)行環(huán)境上運(yùn)行,通過(guò)消息隊(duì)列管理為時(shí)斷時(shí)續(xù)的網(wǎng)絡(luò)連接條件下的移動(dòng) 應(yīng)用程序提供一種可靠的數(shù)據(jù)通信手段。(2)有效地保證共享數(shù)據(jù)的成功收發(fā)及數(shù)據(jù)的一致性,支持?jǐn)?shù)據(jù)共享。兩個(gè)終端互 相發(fā)送消息,并對(duì)接收到的消息進(jìn)行處理,進(jìn)而繼續(xù)發(fā)送處理過(guò)的消息,并且這過(guò)程出現(xiàn)問(wèn) 題時(shí),程序進(jìn)行相應(yīng)的回滾,這樣也保證了兩個(gè)終端之間消息的雙向同步,而不是簡(jiǎn)單的消
息替換。
圖1為本實(shí)用新型所述系統(tǒng)的總體結(jié)構(gòu)示意圖;圖2為本實(shí)用新型所述系統(tǒng)的移動(dòng)客戶端結(jié)構(gòu)示意圖;圖3為本實(shí)用新型所述系統(tǒng)的服務(wù)器端結(jié)構(gòu)示意圖;圖4為本實(shí)用新型所述系統(tǒng)的工作流程圖;圖5為本實(shí)用新型所述系統(tǒng)設(shè)計(jì)的實(shí)施裝置工作流程圖。
具體實(shí)施方式
本實(shí)用新型提供了一種用于支持移動(dòng)環(huán)境的消息中間件的實(shí)施系統(tǒng)。物理上,該 系統(tǒng)可劃分為服務(wù)器端(后臺(tái)計(jì)算機(jī))和客戶端(手機(jī)設(shè)備)兩部分,兩者通過(guò)無(wú)線網(wǎng)絡(luò)、 藍(lán)牙等通信協(xié)議連接在一起,其中后臺(tái)計(jì)算機(jī)上運(yùn)行著本實(shí)用新型的消息中間件服務(wù)器部 分,手機(jī)設(shè)備上運(yùn)行移動(dòng)客戶端部分。可以實(shí)施兩個(gè)手機(jī)設(shè)備之間的數(shù)據(jù)共享,他們可以不 需通過(guò)服務(wù)器,而是直接進(jìn)行點(diǎn)對(duì)點(diǎn)的通信;也可以實(shí)施一臺(tái)服務(wù)器與多個(gè)手機(jī)設(shè)備之間 的數(shù)據(jù)共享,這是結(jié)合消息中間件上的發(fā)布/訂閱方式而完成的??梢赃x擇通過(guò)TCP/IP、 HTTP或藍(lán)牙等協(xié)議同手機(jī)設(shè)備上的移動(dòng)應(yīng)用程序進(jìn)行通訊。目前輕量級(jí)的移動(dòng)中間件正是在這種背景之下產(chǎn)生的。移動(dòng)中間件位于移動(dòng)網(wǎng) 絡(luò)、操作系統(tǒng)和移動(dòng)應(yīng)用軟件之間,使用底層操作系統(tǒng)提供的基本功能和服務(wù),通過(guò)API為 上層的移動(dòng)應(yīng)用系統(tǒng)提供從一般的應(yīng)用需求中抽象出來(lái)的、移動(dòng)網(wǎng)絡(luò)應(yīng)用所需要的更高層 的、通用的功能與服務(wù)。比較成熟的移動(dòng)中間件有上下文感知的中間件和數(shù)據(jù)共享中間件等。上下文感 知的中間件使得移動(dòng)應(yīng)用可以感知諸如位置、設(shè)備狀態(tài)、用戶行為等上下文信息。位置信 息是上下文感知的中間件研究最多的方面,目前有許多成熟的應(yīng)用,例如提供旅游指南 的CyberGuide,可以發(fā)送廣告的Object I^ger,及在一個(gè)特定區(qū)域發(fā)送消息給任何人的 Conference Assistant等。數(shù)據(jù)共享的中間件支持用戶離線操作,并在他們?cè)俅芜B線時(shí)對(duì) 數(shù)據(jù)進(jìn)行共享。較為優(yōu)秀的數(shù)據(jù)共享中間件有Coda、Odyssey、Bayou及Xmiddle。他們都 是最大限度地提高數(shù)據(jù)的可用性,但他們檢測(cè)并解決沖突的機(jī)制并不相同。Odyssey比它的 前任Coda更適合移動(dòng)環(huán)境,但是由于它需要較大的計(jì)算能力;Bayou使用應(yīng)用程序相關(guān)的 知識(shí)進(jìn)行依賴檢查,可能受到級(jí)聯(lián)沖突解決的影響;Xmiddle使用XML來(lái)描述信息,使用DOM 來(lái)對(duì)數(shù)據(jù)進(jìn)行操作。Coda、Odyssey等其他的數(shù)據(jù)共享中間件在進(jìn)行數(shù)據(jù)復(fù)制時(shí)需要將整 個(gè)文件都復(fù)制一遍,而Xmiddle可以簡(jiǎn)單的調(diào)整復(fù)制單元來(lái)適應(yīng)不同的需要,更適合存儲(chǔ) 容量有限的移動(dòng)設(shè)備。消息是異構(gòu)系統(tǒng)交換數(shù)據(jù)的一種有效方式,它可以被不同的應(yīng)用程序所理解,異 構(gòu)的系統(tǒng)可以通過(guò)交換消息進(jìn)行通信。消息中間件(MOM)通過(guò)消息隊(duì)列和訂閱/發(fā)布模式 支持分布式應(yīng)用軟件之間進(jìn)行跨平臺(tái)的消息傳遞。與遠(yuǎn)程過(guò)程調(diào)用(RPC)相比,PRC就像 打電話,而MOM就像發(fā)郵件,不用即時(shí),可以斷斷續(xù)續(xù)事后批量處理。MOM具有松耦合、異步 通訊等特點(diǎn)使其特別適合網(wǎng)絡(luò)連接性較差的移動(dòng)網(wǎng)絡(luò)環(huán)境。不過(guò)現(xiàn)有的消息中間件(如 IBM MQkries等)都是運(yùn)行于固定網(wǎng)絡(luò)上的固定主機(jī)上,設(shè)備能力要求較高,不完全適合 手機(jī)設(shè)備,所以本實(shí)用新型在服務(wù)器端還設(shè)置了如下單元。如圖1所示該手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng)應(yīng)用于至少一個(gè)服務(wù)器端和兩個(gè)以上運(yùn)行于手機(jī)設(shè)備的客戶端組成的系統(tǒng)中;如圖2所示所述客戶端包括客戶端項(xiàng)目管理單元100,用于用戶編輯消息,配置通信對(duì)象以及通信方式參數(shù), 由PanelManageiNClientEdit類組成;客戶端消息轉(zhuǎn)換單元101,用于將用戶編輯的消息轉(zhuǎn) 換成XML格式的消息,并將此消息繼續(xù)轉(zhuǎn)換成樹(shù)的形式,由TransformMessage、ExportLink 類組成;客戶端緩存單元102,用于使用戶可以離線的對(duì)數(shù)據(jù)進(jìn)行操作修改,并將客戶端 經(jīng)常訪問(wèn)的服務(wù)器端的數(shù)據(jù)存儲(chǔ)在本地,以防止當(dāng)客戶端頻繁的訪問(wèn)服務(wù)器,節(jié)約網(wǎng)絡(luò)帶 寬,由RecordStoreOperation類組成;客戶端消解策略單元103,用于對(duì)消息轉(zhuǎn)換單元轉(zhuǎn) 換成樹(shù)形式的消息中的沖突節(jié)點(diǎn)定義沖突解決策略,即根據(jù)具體的應(yīng)用來(lái)定義不同的沖突 消解策略,如添加、修改、替換等,由TreeDiff、TreeMerge, TreeReplica, ListEntry類組 成;客戶端DOM操作單元104,用于對(duì)XML格式的樹(shù)形結(jié)構(gòu)的消息進(jìn)行添加和修改操作,并 對(duì)其他終端發(fā)送過(guò)來(lái)的消息進(jìn)行解析,如比較兩顆樹(shù)的不同之處,對(duì)節(jié)點(diǎn)進(jìn)行修改等;由 XMLTranslatorλ MessageHead、MessageBodyΛ Message、NeedToShareΛ DiscoveryRequest、 AgentConnectedλ AgentDisconnected、EditionIdentifier、LinkedTableMessage、 LinkedFrom、ConfirmMessage、TlistOfEI、NewChangesΛ Acknowledge 類組成;客戶端沖突 消解單元105,用于調(diào)用客戶端DOM操作單元對(duì)XML消息進(jìn)行處理,之后調(diào)用所述客戶端消 解策略單元,按照事先定義的沖突消解策略來(lái)解決沖突,由Reconcile、ReplaceStrategy, MinusStrategy、AddStrategy類組成;客戶端通信單元106,用于使用戶采用一定的通 信協(xié)議,如Http,藍(lán)牙等,來(lái)與其他客戶端或服務(wù)器進(jìn)行通信,由Observer、Protocol, Subject 接 口,Transport、ProSocket、ProHttp> ProBluetooth、Agent、ConnectAgent> Reconci1eAgent、ExchangeInfoAgent> ConfirmChangesAgent、ListEIAgent> NewChangesAgent、AckAgent, Terminate類組成;機(jī)上應(yīng)用程序管理單元107,手機(jī)設(shè)備廠 商提供,用于管理Java Me移動(dòng)應(yīng)用程序的下載、解壓、安裝、刪除、運(yùn)行;顯示單元108,用 于將結(jié)果顯示給用戶。如圖3所示服務(wù)器端包括服務(wù)器端通信單元206,用于使該服務(wù)器與其他客戶端或服務(wù)器進(jìn)行通信;服務(wù) 器端消解策略單元205,用于對(duì)樹(shù)形式的消息中的沖突節(jié)點(diǎn)定義沖突解決策略;服務(wù)器端 DOM操作單元204,用于對(duì)XML格式的樹(shù)形結(jié)構(gòu)的消息進(jìn)行添加和修改操作,并對(duì)其他終端 發(fā)送過(guò)來(lái)的消息進(jìn)行解析;服務(wù)器端沖突消解單元203,用于調(diào)用服務(wù)器端DOM操作單元 對(duì)XML消息進(jìn)行處理,之后調(diào)用所述服務(wù)器端消解策略單元,按照事先定義的沖突消解策 略來(lái)解決沖突;上述各單元與客戶端組成基本一致,這里不再贅述。其中服務(wù)器端存儲(chǔ)單 元202,用于將消息存儲(chǔ)在數(shù)據(jù)庫(kù)中,并支持對(duì)數(shù)據(jù)庫(kù)中消息的操作;由類FileOperation、 DatabaseOperation組成;服務(wù)器端消息隊(duì)列管理單元201,用于對(duì)服務(wù)器的消息進(jìn)行管 理,并控制服務(wù)器同其他終端之間進(jìn)行收發(fā)消息,由類Mart、Init, StartXMLTranslator, ThreadPool 類組成。所述中間件系統(tǒng)的一個(gè)客戶端作為消息的發(fā)送方,其客戶端消息轉(zhuǎn)換單元在收 到用戶利用該客戶端項(xiàng)目管理單元編輯的消息后,將此消息轉(zhuǎn)換成XML格式,然后利用客 戶端消解策略單元為可能會(huì)產(chǎn)生沖突的節(jié)點(diǎn)添加沖突解決策略,再通過(guò)客戶端通信單元向 外發(fā)送消息;由服務(wù)器端或者是另一個(gè)客戶端接收消息,服務(wù)器端或者是另一個(gè)客戶端的DOM操作單元對(duì)消息進(jìn)行相關(guān)DOM操作,即接收方DOM操作單元對(duì)兩個(gè)不同的樹(shù)型結(jié)構(gòu)的 XML消息進(jìn)行比較,產(chǎn)生diff樹(shù),以記錄著由兩個(gè)不同消息所產(chǎn)生的沖突;然后接收方中的 沖突消解單元對(duì)沖突進(jìn)行消解,產(chǎn)生一個(gè)沒(méi)有沖突的新樹(shù),再將此樹(shù)發(fā)送給發(fā)送方;如果此 過(guò)程發(fā)生在兩個(gè)移動(dòng)客戶端之間,則將結(jié)果存儲(chǔ)于所述的客戶端緩存單元中,并交由所述 的顯示單元顯示;如果此過(guò)程發(fā)生在移動(dòng)客戶端與服務(wù)器之間,則服務(wù)器將此消息保存在 服務(wù)器端存儲(chǔ)單元的數(shù)據(jù)庫(kù)中,并由所述的服務(wù)器端消息隊(duì)列管理單元將此消息通過(guò)服務(wù) 器端通信單元發(fā)送給所有訂閱者。另外,客戶端緩存單元包括一個(gè)臨時(shí)的消息隊(duì)列,客戶端將消息放到此消息隊(duì)列 中,由此消息隊(duì)列主動(dòng)按照該客戶端通信單元所設(shè)定的協(xié)議來(lái)發(fā)送或接收消息,以防止在 網(wǎng)絡(luò)條件不好時(shí),客戶端阻塞等待;每個(gè)消息都附加一個(gè)發(fā)送結(jié)束符,當(dāng)消息發(fā)送到結(jié)束符 時(shí),則認(rèn)為消息發(fā)送成功,否則認(rèn)為消息發(fā)送失敗,重新發(fā)送此消息或進(jìn)行后一步處理。在 服務(wù)器消息隊(duì)列管理單元包括一個(gè)線程池與工作隊(duì)列,由工作隊(duì)列對(duì)接收到的請(qǐng)求進(jìn)行監(jiān) 聽(tīng),然后按照優(yōu)先級(jí)在線程池中取出一個(gè)線程與響應(yīng)的終端進(jìn)行通信,這樣就可以使服務(wù) 器在多線程的情況下同時(shí)與多個(gè)終端進(jìn)行消息的通信;每個(gè)線程與終端通信時(shí),都包含一 個(gè)與客戶端類似的消息隊(duì)列,用于主動(dòng)的發(fā)送或接收消息,只是并將接收到的消息不再保 存于緩存中,而是保存在數(shù)據(jù)庫(kù)中;當(dāng)在給定時(shí)間內(nèi)沒(méi)收到確認(rèn)信息時(shí),服務(wù)器的處理方法 是對(duì)于持久的訂閱者來(lái)說(shuō),如果終端斷線,服務(wù)器將消息存儲(chǔ)起來(lái),當(dāng)他再次連線時(shí),服務(wù) 器會(huì)將消息再次發(fā)給訂閱者;對(duì)于非持久的訂閱者來(lái)說(shuō),斷線就意味著失敗,服務(wù)器將此訂 閱信息刪除,如果訂閱者想繼續(xù)接收消息,那么他需要再次發(fā)送訂閱信息。發(fā)送方通過(guò)通信 單元與接收方通信,由發(fā)送方先發(fā)送一個(gè)發(fā)現(xiàn)請(qǐng)求消息,如果接收方收到此消息,會(huì)返回給 發(fā)送方一個(gè)確認(rèn)碼,則發(fā)送方將自己所存儲(chǔ)消息的所有版本都發(fā)送給接收方;如果接收方 沒(méi)有收到發(fā)現(xiàn)請(qǐng)求消息或發(fā)送方?jīng)]有收到確認(rèn)碼,則需要發(fā)送方重新發(fā)送發(fā)現(xiàn)請(qǐng)求消息給 接收方。結(jié)合圖4說(shuō)明本實(shí)用新型用于支持移動(dòng)環(huán)境的消息中間件系統(tǒng)設(shè)計(jì)的工作方法, 具體如下首先由用戶根據(jù)具體的應(yīng)用,通過(guò)客戶端項(xiàng)目管理單元100來(lái)編輯消息,并對(duì)配 置信息進(jìn)行相應(yīng)設(shè)計(jì),如希望與哪個(gè)終端進(jìn)行通信,通信的方式及端口(步驟S301);客戶端通過(guò)客戶端消息轉(zhuǎn)換單元101將用戶編輯的消息轉(zhuǎn)換成XML格式的消息, 將此消息存儲(chǔ)于客戶端緩存單元中102 ;之后將此消息繼續(xù)轉(zhuǎn)換成樹(shù)的形式,然后根據(jù)具 體的應(yīng)用,通過(guò)客戶端消解策略單元105為每個(gè)可能產(chǎn)生沖突的節(jié)點(diǎn)定義一個(gè)沖突解決策 略,并通過(guò)客戶端DOM操作單元104為這顆樹(shù)添加一個(gè)節(jié)點(diǎn),此節(jié)點(diǎn)記錄著沖突解決策略; 當(dāng)發(fā)生沖突時(shí),應(yīng)用程序應(yīng)該采取此節(jié)點(diǎn)定義的沖突解決策略來(lái)解決沖突(步驟S302);當(dāng)客戶端A作為發(fā)送方通過(guò)客戶端通信單元106與另一個(gè)終端B作為接收方開(kāi)始 通信,客戶端A (發(fā)送方)先發(fā)送一個(gè)發(fā)現(xiàn)請(qǐng)求消息,如果B (接收方)收到此消息,會(huì)返回 給A(發(fā)送方)一個(gè)確認(rèn)碼,說(shuō)明此時(shí)A(發(fā)送方)與B(接收方)是可以進(jìn)行通信的,A(發(fā) 送方)將自己所存儲(chǔ)消息的所有版本都發(fā)送給B (接收方);如果B (接收方)沒(méi)有收到發(fā) 現(xiàn)請(qǐng)求消息或A(發(fā)送方)沒(méi)有收到確認(rèn)碼,則說(shuō)明此時(shí)網(wǎng)絡(luò)條件不良,則需要重新發(fā)送發(fā) 現(xiàn)請(qǐng)求消息(步驟S303);B (接收方)收到A (發(fā)送方)所存儲(chǔ)消息的所有版本后,通過(guò)服務(wù)器端或者是另一個(gè)客戶端的DOM操作單元104對(duì)這些消息進(jìn)行解析,并與自己存儲(chǔ)的消息進(jìn)行比較,此時(shí)若 A(發(fā)送方)與B (接收方)中有一方修改過(guò)消息,則比較時(shí)會(huì)發(fā)現(xiàn)沖突,B (接收方)將這些 沖突記錄下來(lái)(步驟S304);B (接收方)根據(jù)步驟S302所定義的沖突節(jié)點(diǎn)的解決策略節(jié)點(diǎn),通過(guò)服務(wù)器端或者 是另一個(gè)客戶端的消解策略單元調(diào)用事先定義好的消解策略,由服務(wù)器端或者是另一個(gè)客 戶端的沖突消解單元對(duì)沖突進(jìn)行消解,并記錄下解決沖突后的新消息(步驟S305);若B (接收方)是移動(dòng)客戶端,則B (接收方)將此新消息通過(guò)客戶端緩存單元102 存儲(chǔ)在緩存中,并將此新消息通過(guò)客戶端通信單元返回給A (發(fā)送方),A (發(fā)送方)記錄下 這個(gè)解決沖突后的消息,并存儲(chǔ)在緩存中,然后交由客戶端顯示單元108顯示結(jié)果(步驟 S306);若B(接收方)是服務(wù)器,則B(接收方)通過(guò)服務(wù)器端消息隊(duì)列管理單元201對(duì)消 息進(jìn)行一定處理,把消息包裝成服務(wù)器可識(shí)別的消息,之后通過(guò)服務(wù)器端存儲(chǔ)單元202將 消息存儲(chǔ)在數(shù)據(jù)庫(kù)中步驟307);步驟8然后服務(wù)器將更新過(guò)的消息通過(guò)服務(wù)器端通信單元206發(fā)送給所有訂閱 者,使得所有訂閱者中的消息保持同步(步驟308)。圖5給出了本實(shí)用新型實(shí)施裝置的流程圖。該裝置可劃分為發(fā)起端與接收端,發(fā) 起端是一臺(tái)移動(dòng)智能手機(jī),接收端可以使一臺(tái)移動(dòng)智能手機(jī),也可以是消息中間件服務(wù)器, 發(fā)起端與接收端通過(guò)藍(lán)牙、TCP/IP或者HTTP協(xié)議進(jìn)行通訊連接。為方便起見(jiàn),圖5中的判斷條件都簡(jiǎn)寫(xiě)成標(biāo)識(shí)符,其中Xl表示“接收端是否為服務(wù) 器”,X2表示“接收端是否接收到了發(fā)現(xiàn)請(qǐng)求消息”,X3表示“發(fā)起端是否收到確認(rèn)碼”,X4表 示“是否接收到新消息發(fā)送成功的確認(rèn)碼”。如圖3所示,本實(shí)用新型裝置的具體步驟為1、如果用戶通過(guò)移動(dòng)智能手機(jī)想要與服務(wù)器進(jìn)行通信連接(XI為真),則服務(wù)器 需先進(jìn)行一系列的初始化,包括使數(shù)據(jù)庫(kù)與實(shí)時(shí)信息同步、設(shè)置工作隊(duì)列與線程池。發(fā)起端 訂閱自己感興趣的消息,或發(fā)布一些消息到服務(wù)器中。如果用戶通過(guò)移動(dòng)智能手機(jī)想要與 另一手機(jī)進(jìn)行通信連接(XI為假),則接收端與發(fā)起端一并進(jìn)行消息的編輯,由程序?qū)⒕庉?好的消息轉(zhuǎn)化成機(jī)器可識(shí)別的XML格式的消息。2、接收端監(jiān)聽(tīng)端口,看有沒(méi)有輸入流流入,發(fā)起端發(fā)送發(fā)現(xiàn)請(qǐng)求消息,若接收端接 收到消息(X2為真),則返回一個(gè)接收到消息后的確認(rèn)碼,否則接收端一直處于監(jiān)聽(tīng)端口的 狀態(tài)。同樣,在發(fā)起端發(fā)送發(fā)現(xiàn)請(qǐng)求消息之后,一直處于監(jiān)聽(tīng)端口的狀態(tài),直到接收到接收 端換回的確認(rèn)碼為止(X3為真)。此處當(dāng)發(fā)起端與接收端若超過(guò)一段時(shí)間還沒(méi)有接收到消 息,則認(rèn)定當(dāng)前網(wǎng)絡(luò)不良,需要過(guò)一段時(shí)間再次執(zhí)行此步驟。3、發(fā)起端發(fā)送需進(jìn)行數(shù)據(jù)共享的消息,接收端接收到消息后,與本地消息一并進(jìn) 行處理,找出兩個(gè)不同消息所產(chǎn)生的沖突,并對(duì)這些沖突進(jìn)行消解。之后將解決沖突后的新 消息返回給發(fā)起端。此時(shí)兩個(gè)終端會(huì)彼此發(fā)送新消息接收成功的確認(rèn)碼,如果超出預(yù)定時(shí) 間沒(méi)有接收到確認(rèn)碼(X4為假),則需要對(duì)程序進(jìn)行回滾,從第2步重新開(kāi)始執(zhí)行。4、如果成功接收到確認(rèn)碼(X4為真),則發(fā)起端須將新消息存儲(chǔ)在緩存中,以便下 次繼續(xù)使用。同樣地,若接收端是移動(dòng)智能手機(jī)(XI為假),則接收端也需將新消息存儲(chǔ)在 緩存中。若接收端是服務(wù)器(XI為真),則需將新消息存儲(chǔ)在數(shù)據(jù)庫(kù)中,并由服務(wù)器通知其 他訂閱此消息的主機(jī),數(shù)據(jù)已變動(dòng),使他們的數(shù)據(jù)與服務(wù)器中的數(shù)據(jù)保持同步。[0059][第一實(shí)施方式]本實(shí)用新型的第一優(yōu)選實(shí)施例以一個(gè)合作的電子購(gòu)物系統(tǒng)為例。一個(gè)家庭很多成 員在網(wǎng)上購(gòu)物,他們每人都有一個(gè)移動(dòng)智能手機(jī),他們獨(dú)自選擇所需的商品,并將所選擇的 商品記錄在個(gè)人智能手機(jī)上,而最終付賬時(shí)是共同交錢,所以要將個(gè)人買的商品“合并”在 一起,再由其中一個(gè)智能手機(jī)進(jìn)行網(wǎng)絡(luò)支付。例如,成員A買了 1瓶牛奶和2個(gè)蘋(píng)果,成員 B買了 2瓶牛奶,他們獨(dú)自的將這些信息記錄在個(gè)人智能手機(jī)上,當(dāng)他們想要支付時(shí),他們 先將這些商品通過(guò)手機(jī)“合并”在一起,程序合并兩個(gè)手機(jī)中的消息,結(jié)果為3瓶牛奶和2 個(gè)蘋(píng)果,然后由A進(jìn)行最終的網(wǎng)絡(luò)支付。該程序主要由MerChandise,Milk,Apple,ParSer, ClientPanel,UploadToPay類組成,本實(shí)例實(shí)施目的是檢查在目標(biāo)機(jī)型SonyEricsson K700C上數(shù)據(jù)數(shù)據(jù)共享的執(zhí)行結(jié)果是否正確。具體的實(shí)施步驟如下1、用戶A與B分別在客戶端項(xiàng)目管理單元100的向?qū)姘逑戮庉嬒?,A編輯消 息lmilk and 2apple,B編輯消息anilk,然后設(shè)置對(duì)方為通信的對(duì)象,并設(shè)置通信協(xié)議為 藍(lán)牙,之后提交消息,用戶可以去忙別的事,如打電話,發(fā)短信等,無(wú)需等待。2、程序接收到消息后,使用客戶端消息轉(zhuǎn)換單元101對(duì)消息進(jìn)行解析,解析完的 結(jié)果是{milk:l,apple :2}及{milk :2},之后將消息轉(zhuǎn)換成XML格式的消息,根節(jié)點(diǎn)為 basket, A 的消息為 <basket><order><product>milk</product><quantity><howmuch>l</ howmuch></quantity></order><order><product>apple</ productXquantity><howmuch>2</howmuch></quantity></order></basket>, B 白勺
息 為〈basket><order><product>milk</product><quantity><howmuch>2</howmuch></ quantityX/orderX/basket〉,他們都將消息存儲(chǔ)在緩存中。之后通過(guò)客戶端消解策略 單元105為quantity節(jié)點(diǎn)定義一個(gè)沖突解決策略add,意味著當(dāng)quantity節(jié)點(diǎn)產(chǎn)生沖突 時(shí),系統(tǒng)應(yīng)該將采取相加的策略來(lái)解決沖突。之后通過(guò)客戶端DOM操作單元104為每個(gè) quantity節(jié)點(diǎn)添加一個(gè)節(jié)點(diǎn)add,用于顯示的標(biāo)注沖突解決策略。3、客戶端A通過(guò)客戶端通信單元106與另一個(gè)終端B開(kāi)始進(jìn)行通信連接,本地主 機(jī)A先發(fā)送一個(gè)“發(fā)現(xiàn)請(qǐng)求”消息〈DiscoveryRequest/〉,當(dāng)網(wǎng)絡(luò)條件較好時(shí),B會(huì)接收到此 消息,并返回給A —個(gè)確認(rèn)碼<C0nnectAgent/>,A將自己所存儲(chǔ)消息發(fā)送給B ;當(dāng)網(wǎng)絡(luò)條件 不好或設(shè)備出現(xiàn)硬件故障時(shí),B不會(huì)接收到發(fā)現(xiàn)請(qǐng)求消息或者A不會(huì)接收到確認(rèn)碼,則需要 對(duì)硬件進(jìn)行處理或間隔一段時(shí)間再次重新進(jìn)行通信連接。4、B收到A的消息后,通過(guò)客戶端DOM操作單元104對(duì)這些消息進(jìn)行解析,并與自 己存儲(chǔ)的消息進(jìn)行比較,B會(huì)發(fā)現(xiàn)兩個(gè)消息是不同的,此時(shí)就產(chǎn)生了沖突,沖突為B的milk 的數(shù)量是2,A的milk數(shù)量是1,并且B比A少了 2個(gè)apple。B將這些沖突記錄下來(lái)。5、B在客戶端沖突消解單元103對(duì)沖突進(jìn)行消解。先解決前半部分沖 突,根據(jù)quantity節(jié)點(diǎn)所定義的解決策略節(jié)點(diǎn)add,對(duì)milk的數(shù)量進(jìn)行相加,為 2+1 = 3。然后解決后半部分沖突,因?yàn)锽比A少2個(gè)apple,所以將A的apple分 支整體復(fù)制到B的消息下。最終沖突消解后的內(nèi)容為3個(gè)milk及2個(gè)apple,為 <basket><order><product>milk</productXquant i ty><howmuch>l</howmuch></ quantityX/order><order><product>apple</productXquanti ty><howmuch>2</ howmuchX/quantity></order></basket>06、B將此新消息通過(guò)客戶端緩存單元102存儲(chǔ)在緩存中,以便用于之后的網(wǎng)上支付或再次與其他終端進(jìn)行數(shù)據(jù)共享,并將此新消息通過(guò)客戶端通信單元106返回給A,A記 錄下這個(gè)解決沖突后的消息,并存儲(chǔ)在緩存中。系統(tǒng)通過(guò)顯示單元108分別將結(jié)果顯示給 兩個(gè)用戶。7、A將最終結(jié)果3個(gè)milk及2個(gè)apple經(jīng)由網(wǎng)絡(luò)上傳到網(wǎng)上,進(jìn)行網(wǎng)上支付。[第二實(shí)施方式]本實(shí)用新型的第二優(yōu)選實(shí)施例以股票交易系統(tǒng)為例。用戶首先通過(guò)移動(dòng)智能手機(jī) 與消息服務(wù)器相連,并通過(guò)在手機(jī)設(shè)備上對(duì)股票進(jìn)行買賣操作,買賣結(jié)果通知服務(wù)器,服務(wù) 器對(duì)此進(jìn)行進(jìn)一步處理。當(dāng)此股票出現(xiàn)一些重大變更,如漲停、跌停、或分紅等,用戶還可以 收到來(lái)自服務(wù)器的通知,以便用戶對(duì)此變更進(jìn)行及時(shí)的處理。該程序主要由ClientPanel, StockOperation, Subscribe, SendToClient類組成,本實(shí)例的實(shí)施目的是檢查在目標(biāo)機(jī)型 SonyEricsson K700C上整個(gè)股票交易系統(tǒng)完成的情況,是否可以實(shí)現(xiàn)數(shù)據(jù)共享,當(dāng)用戶訂 閱的股票出現(xiàn)一些重大變更時(shí)是否可以及時(shí)收到服務(wù)器的通知。具體實(shí)施步驟如下1、首先對(duì)服務(wù)器進(jìn)行初始化,設(shè)置工作隊(duì)列及線程池,并與實(shí)時(shí)股票結(jié)合起來(lái),服 務(wù)器管理者將股票信息錄入到服務(wù)器中。當(dāng)股票信息發(fā)送改變時(shí),服務(wù)器中的股票信息會(huì) 及時(shí)做出相應(yīng)改變。2、用戶通過(guò)項(xiàng)客戶端目管理單元100的向?qū)姘逑蚍?wù)器訂閱自己感興趣的股 票,服務(wù)器將這些股票的信息通過(guò)服務(wù)器端通信單元206返回給用戶,用戶可以在向?qū)?板查看股票信息,當(dāng)股票信息發(fā)生改變時(shí),服務(wù)器會(huì)實(shí)時(shí)的通知用戶,以便用戶進(jìn)一步對(duì)股 票進(jìn)行操作。3、當(dāng)用戶想要在手機(jī)端對(duì)股票進(jìn)一步操作時(shí),如用戶已有a股票200股,在價(jià)格不 變的情況下再次買進(jìn)100股,用戶通過(guò)客戶端項(xiàng)目管理單元100的向?qū)姘鍋?lái)編輯相應(yīng)的 股票信息buy 100 for a,選擇HTTP方式與服務(wù)器進(jìn)行通信,之后提交消息。4、程序接收到消息后,使用客戶端消息轉(zhuǎn)換單元101對(duì)消息進(jìn)行解析,解析完 的結(jié)果是Ka, 100, buy〉},之后將消息轉(zhuǎn)換成XML格式的消息,根節(jié)點(diǎn)為stock,,轉(zhuǎn)換結(jié) 果 為 <stock><order><ID>a</IDXquantity><howmuch>100</howmuch></quantityXsty le>buy</style></order></stock>,之后通過(guò)客戶端消解策略單元105為quantity節(jié)點(diǎn)定 義一個(gè)沖突解決策略add,意味著當(dāng)服務(wù)器中儲(chǔ)存的用戶原有的股票數(shù)量與現(xiàn)在新購(gòu)買的 股票數(shù)量發(fā)生沖突時(shí),程序會(huì)采取對(duì)數(shù)量相加的方式來(lái)解決沖突。之后通過(guò)客戶端DOM操 作單元104為每個(gè)quantity節(jié)點(diǎn)添加一個(gè)節(jié)點(diǎn)add,用于顯示的標(biāo)注沖突解決策略。5、用戶使用手機(jī)通過(guò)客戶端通信單元106與服務(wù)器開(kāi)始進(jìn)行通信連接,手機(jī)端先 發(fā)送一個(gè)“發(fā)現(xiàn)請(qǐng)求”消息〈DiscoveryRequest/〉,當(dāng)網(wǎng)絡(luò)條件較好時(shí),服務(wù)器會(huì)接收到此消 息,并返回給手機(jī)一個(gè)確認(rèn)碼〈CormectAgent/〉,手機(jī)端將自己所存儲(chǔ)消息發(fā)送給服務(wù)器; 當(dāng)網(wǎng)絡(luò)條件不好或設(shè)備出現(xiàn)硬件故障時(shí),服務(wù)器不會(huì)接收到發(fā)現(xiàn)請(qǐng)求消息,或者手機(jī)端不 會(huì)接收到確認(rèn)碼,則此時(shí)需要對(duì)硬件進(jìn)行處理或間隔一段時(shí)間再次重新進(jìn)行通信連接。6、服務(wù)器收到用戶消息后,通過(guò)服務(wù)器端DOM操作單元204對(duì)這些消息進(jìn)行解析, 并與存儲(chǔ)在數(shù)據(jù)庫(kù)中的消息進(jìn)行比較,服務(wù)器會(huì)發(fā)現(xiàn)兩個(gè)消息是不同的,此時(shí)就產(chǎn)生了沖 突,沖突為服務(wù)器中用戶所買的a股票的數(shù)量是200,用戶新提交的a股票的數(shù)量是100。 B將這些沖突記錄下來(lái)。7、B在服務(wù)器端沖突消解單元203對(duì)沖突進(jìn)行消解。根據(jù)quantity節(jié)點(diǎn)所定義
10的解決策略節(jié)點(diǎn)add,對(duì)a的數(shù)量進(jìn)行相加,為200+100 = 300。最終沖突消解后的內(nèi)容 為 300 股 a 股票,為 <stockXorderXID>a</IDXquantityXhowmuch> 300</howmuch></ quantityX/orderX/stock>。8、服務(wù)器通過(guò)服務(wù)器端消息隊(duì)列管理單元201對(duì)消息進(jìn)行一定處理,把消息包裝 成服務(wù)器可識(shí)別的消息,之后通過(guò)服務(wù)器端存儲(chǔ)單元202將消息存儲(chǔ)在數(shù)據(jù)庫(kù)中。9、如果服務(wù)器收到此a股票分紅或漲停等新消息后,服務(wù)器將更新過(guò)的消息通過(guò) 服務(wù)器端通信單元206發(fā)送給訂閱此a股票的所有訂閱者,以便用戶可以及時(shí)的對(duì)股票進(jìn) 行實(shí)時(shí)處理。運(yùn)用本實(shí)用新型所提供的方法,可以實(shí)現(xiàn)在不經(jīng)過(guò)服務(wù)器的情況下,支持客戶端 之間的數(shù)據(jù)共享。本實(shí)用新型允許客戶端在他們連接的時(shí)候共享數(shù)據(jù),并在他們重新取得 連接時(shí),對(duì)他們斷開(kāi)連接時(shí)進(jìn)行離線的數(shù)據(jù)操作所導(dǎo)致的沖突進(jìn)行沖突消解。本實(shí)用新型 還支持在手機(jī)設(shè)備與服務(wù)器之間的采用數(shù)據(jù)共享式的通信,允許用戶對(duì)自己已經(jīng)發(fā)布的信 息作出修改,并訂閱相應(yīng)信息,服務(wù)器會(huì)在用戶訂閱的信息作出改變通知用戶。以上所述,僅為本實(shí)用新型較佳的具體實(shí)施方式
,但本實(shí)用新型的保護(hù)范圍并不 局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本實(shí)用新型揭露的技術(shù)范圍內(nèi),根據(jù)本實(shí)用 新型的技術(shù)方案及其發(fā)明構(gòu)思加以等同替換或改變,都應(yīng)涵蓋在本實(shí)用新型的保護(hù)范圍之 內(nèi)。
權(quán)利要求1. 一種在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng),其特征在于該系統(tǒng)包括至少一個(gè) 由后臺(tái)計(jì)算機(jī)構(gòu)成到的服務(wù)器端和兩個(gè)以上運(yùn)行于手機(jī)設(shè)備的客戶端組成的系統(tǒng);所述服 務(wù)器端同客戶端通過(guò)無(wú)線網(wǎng)絡(luò)或藍(lán)牙通信相連接,其中后臺(tái)計(jì)算機(jī)安裝消息中間件服務(wù)器 部分,手機(jī)設(shè)備安裝移動(dòng)客戶端部分;所述各手機(jī)設(shè)備之間通過(guò)TCP/IP、HTTP或藍(lán)牙無(wú)線 連接方式進(jìn)行數(shù)據(jù)共享進(jìn)行點(diǎn)對(duì)點(diǎn)的通信;所述服務(wù)器與多個(gè)手機(jī)設(shè)備之間通過(guò)TCP/IP、 HTTP或藍(lán)牙無(wú)線連接方式進(jìn)行數(shù)據(jù)共享。
專利摘要本實(shí)用新型公開(kāi)了一種在手機(jī)設(shè)備上進(jìn)行數(shù)據(jù)共享的中間件系統(tǒng),該系統(tǒng)應(yīng)用于至少一個(gè)服務(wù)器端和兩個(gè)以上運(yùn)行于手機(jī)設(shè)備的客戶端組成的系統(tǒng)中;客戶端包括客戶端項(xiàng)目管理單元,客戶端消息轉(zhuǎn)換單元,客戶端緩存單元,客戶端通信單元,客戶端DOM操作單元,客戶端消解策略單元,客戶端沖突消解單元;服務(wù)器端具有服務(wù)器端消息隊(duì)列管理單元,服務(wù)器端存儲(chǔ)單元,服務(wù)器端通信單元,服務(wù)器端消解策略單元,服務(wù)器端DOM操作單元,服務(wù)器端沖突消解單元。通過(guò)上述各單元的數(shù)據(jù)傳輸和處理,使兩個(gè)終端互相發(fā)送消息,并對(duì)接收到的消息進(jìn)行處理,進(jìn)而繼續(xù)發(fā)送處理過(guò)的消息,并且程序可進(jìn)行回滾,這樣也保證了兩個(gè)終端之間消息的雙向同步。
文檔編號(hào)H04L29/08GK201854301SQ20102022881
公開(kāi)日2011年6月1日 申請(qǐng)日期2010年6月13日 優(yōu)先權(quán)日2010年6月13日
發(fā)明者于宏君, 劉亞清, 呂春燕, 宋英杰, 洪麗娜, 郭靜寰, 陳榮 申請(qǐng)人:大連海事大學(xué)
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
泽库县| 阿坝| 江山市| 清苑县| 永川市| 天全县| 福海县| 荥经县| 灵石县| 台湾省| 南城县| 新郑市| 墨玉县| 南通市| 五河县| 河曲县| 南昌市| 玉溪市| 抚顺市| 东兰县| 通道| 孝昌县| 沙田区| 乳山市| 任丘市| 洞口县| 武宣县| 巫山县| 大宁县| 和平县| 星座| 泉州市| 南陵县| 福鼎市| 兴隆县| 右玉县| 荆门市| 视频| 屯门区| 水城县| 石台县|