最近好像有不少朋友關(guān)注Android客戶端消息推送的實(shí)現(xiàn),我在之前的項(xiàng)目中用到過Java PC客戶端消息推送,從原理講上應(yīng)該是一致的,在這里分享一下個(gè)人的心得。
這里的消息推送,通常是指由服務(wù)器端向客戶端發(fā)送的一些消息,比如待辦事宜、新聞等等。 從技術(shù)角度來看,消息推送本質(zhì)上是基于TCP/IP的網(wǎng)絡(luò)IO流傳輸,只不過這個(gè)IO流看起來由服務(wù)器發(fā)起,從上面的條件來看,一個(gè)基本的消息推送框架的Java實(shí)現(xiàn)應(yīng)該是這樣的:有一個(gè)用Java NIO實(shí)現(xiàn)的服務(wù)器,多個(gè)用socket連接到此服務(wù)器的客戶端,然后之間用二進(jìn)制流傳輸信息。說起來簡單,實(shí)現(xiàn)起來卻很不容易,所幸基于XMPP協(xié)議的openfire剛好符合上述條件,不僅如此,這種方案還有如下優(yōu)點(diǎn):
那么具體如何實(shí)現(xiàn)在openfire中推送消息呢?我的想法是這樣的: 當(dāng)兩個(gè)用戶使用openfire中聊天時(shí),消息是從用戶A經(jīng)過服務(wù)器流向用戶B,那么我們可以想象有消息中心這么一個(gè)用戶,它的作用就是當(dāng)我們系統(tǒng)有需要時(shí),向某個(gè)用戶發(fā)一條相應(yīng)的消息,我們的客戶端收到這樣一個(gè)用戶的消息時(shí),就將其當(dāng)做系統(tǒng)消息,這樣就實(shí)現(xiàn)了簡單的消息推送。 還有一個(gè)問題就是,系統(tǒng)怎么知道向哪個(gè)用戶推送消息、什么時(shí)候推送消息,我們可以用http post的方式通知openfire服務(wù)器,用參數(shù)指定消息體和發(fā)送對象。
第一步,使用openfire進(jìn)行消息推送的前提是在openfire系統(tǒng)中注冊賬號,有關(guān)openfire賬號整合自定義數(shù)據(jù)庫請看我的另一篇文章http://blog.csdn.net/nomousewch/article/details/7546083,這里就不說了。 第二步,在openfire中建立一個(gè)插件,這里貼一下核心代碼:
第四步,在業(yè)務(wù)系統(tǒng)中用http client調(diào)用Servlet,來向指定用戶推送消息。
|
|