一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于XMPP協(xié)議(openfire服務(wù)器)的消息推送實(shí)現(xiàn)

 icecity1306 2015-05-08

最近好像有不少朋友關(guān)注Android客戶端消息推送的實(shí)現(xiàn),我在之前的項(xiàng)目中用到過Java PC客戶端消息推送,從原理講上應(yīng)該是一致的,在這里分享一下個(gè)人的心得。

  • 消息推送實(shí)現(xiàn)原理
        這里的消息推送,通常是指由服務(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):
  1. openfire是開源的,用Java寫的,這對Java程序員來說很重要。。。
  2. XMPP協(xié)議采用XML流傳輸消息,可讀性和可擴(kuò)展性優(yōu)秀,便于我們定義自己的推送消息結(jié)構(gòu)。
  3. XMPP協(xié)議在PC和Android分別有對應(yīng)的協(xié)議實(shí)現(xiàn)smack和asmack,不用我們寫XML協(xié)議解析。
        那么具體如何實(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實(shí)現(xiàn)消息推送
         第一步,使用openfire進(jìn)行消息推送的前提是在openfire系統(tǒng)中注冊賬號,有關(guān)openfire賬號整合自定義數(shù)據(jù)庫請看我的另一篇文章http://blog.csdn.net/nomousewch/article/details/7546083,這里就不說了。
         第二步,在openfire中建立一個(gè)插件,這里貼一下核心代碼:
  1. public static void pushMessage(JID to, JID from, String body,  
  2.         String subject) {  
  3.     Message message = new Message();  
  4.     message.setFrom(from);  
  5.     message.setTo(to);  
  6.     message.setBody(body);  
  7.   
  8.     if (StringUtils.isNotBlank(subject)) {  
  9.         message.setSubject(subject);  
  10.     }  
  11.   
  12.     XMPPServer.getInstance().getRoutingTable().routePacket(to, message, true);  
  13. }  
         第三步,在插件中定義一個(gè)Servlet,調(diào)用上述方法。

         第四步,在業(yè)務(wù)系統(tǒng)中用http client調(diào)用Servlet,來向指定用戶推送消息。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    高清国产日韩欧美熟女| 亚洲香艳网久久五月婷婷| 福利视频一区二区在线| 亚洲高清中文字幕一区二区三区| 青青操视频在线播放免费| 中文字幕人妻一区二区免费| 欧美一级黄片免费视频| 91在线国内在线中文字幕| 国内精品伊人久久久av高清 | 成人精品国产亚洲av久久| 在线免费观看一二区视频| 国产精品尹人香蕉综合网| 日韩人妻免费视频一专区| 夫妻性生活真人动作视频| 日本国产欧美精品视频| 欧美一级特黄大片做受大屁股| 欧美一级黄片欧美精品| 精品日韩视频在线观看| 国产成人av在线免播放观看av| 国产欧美一区二区另类精品| 老熟妇乱视频一区二区| 黄色片一区二区三区高清| 91福利免费一区二区三区| 深夜福利亚洲高清性感| 久久这里只精品免费福利| 亚洲一区二区三区日韩91| 日本男人女人干逼视频| 亚洲国产欧美久久精品| 成年午夜在线免费视频| 青青操精品视频在线观看| 亚洲熟女国产熟女二区三区 | 中日韩免费一区二区三区| 精产国品一二三区麻豆| 老熟妇乱视频一区二区| 91日韩欧美在线视频| 久久精品国产99精品亚洲| 午夜亚洲精品理论片在线观看| 日韩成人高清免费在线| 国产亚洲精品一二三区| 黑丝国产精品一区二区| 日韩精品福利在线观看|