基於XMPP協議(openfire伺服器)的訊息推送實現
- 訊息推送實現原理
這裡的訊息推送,通常是指由伺服器端向客戶端傳送的一些訊息,比如待辦事宜、新聞等等。
從技術角度來看,訊息推送本質上是基於TCP/IP的網路IO流傳輸,只不過這個IO流看起來由伺服器發起,從上面的條件來看,一個基本的訊息推送框架的Java實現應該是這樣的:有一個用Java NIO實現的伺服器,多個用socket連線到此伺服器的客戶端,然後之間用二進位制流傳輸資訊。說起來簡單,實現起來卻很不容易,所幸基於XMPP協議的openfire剛好符合上述條件,不僅如此,這種方案還有如下優點:
- openfire是開源的,用Java寫的,這對Java程式設計師來說很重要。。。
- XMPP協議採用XML流傳輸訊息,可讀性和可擴充套件性優秀,便於我們定義自己的推送訊息結構。
- XMPP協議在PC和Android分別有對應的協議實現smack和asmack,不用我們寫XML協議解析。
那麼具體如何實現在openfire中推送訊息呢?我的想法是這樣的:
當兩個使用者使用openfire中聊天時,訊息是從使用者A經過伺服器流向使用者B,那麼我們可以想象有訊息中心這麼一個使用者,它的作用就是當我們系統有需要時,向某個使用者發一條相應的訊息,我們的客戶端收到這樣一個使用者的訊息時,就將其當做系統訊息,這樣就實現了簡單的訊息推送。
還有一個問題就是,系統怎麼知道向哪個使用者推送訊息、什麼時候推送訊息,我們可以用http post的方式通知openfire伺服器,用引數指定訊息體和傳送物件。
- 使用openfire實現訊息推送
第一步,使用openfire進行訊息推送的前提是在openfire系統中註冊賬號,有關openfire賬號整合自定義資料庫請看我的另一篇文章http://blog.csdn.net/nomousewch/article/details/7546083,這裡就不說了。
第二步,在openfire中建立一個外掛,這裡貼一下核心程式碼:
- public static void pushMessage(JID to, JID from, String body,
- String subject) {
- Message message = new Message();
- message.setFrom(from);
- message.setTo(to);
- message.setBody(body);
- if (StringUtils.isNotBlank(subject)) {
- message.setSubject(subject);
- }
- XMPPServer.getInstance().getRoutingTable().routePacket(to, message, true);
- }
第四步,在業務系統中用http client呼叫Servlet,來向指定使用者推送訊息。
相關文章
- 基於xmpp openfire smack開發之Android訊息推送技術原理分析和實踐[4]MacAndroid
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- 基於Netty實現自定義訊息通訊協議(協議設計及解析應用實戰)Netty協議
- 基於workerman實現的web訊息推送站內信功能Web
- 基於XMPP協議的Android即時通訊系協議Android
- 基於 Netty 的可插拔業務通訊協議的實現「1」協議描述及基本訊息物件設計Netty協議物件
- 基於xmpp openfire smack開發之openfire介紹和部署[1]Mac
- 基於XMPP協議開發Android即時通訊軟體協議Android
- 基於XMPP協議Android即時通訊開源應用協議Android
- Android之基於XMPP協議即時通訊軟體(一)Android協議
- XMPP協議協議
- 微信雲託管 WebSocket 實戰:基於模版實現訊息推送Web
- workerman 實現訊息推送
- SpringBoot 實戰 (十六) | 整合 WebSocket 基於 STOMP 協議實現廣播訊息Spring BootWeb協議
- WebSocket 實現伺服器訊息推送客戶端Web伺服器客戶端
- Flutter websocket 實現訊息推送FlutterWeb
- 基於XMPP的即時通訊系統的建立(四)— 協議詳解協議
- 【XMPP】XMPP協議之原理篇協議
- XMPP系列2:如何掌握XMPP協議協議
- 【XMPP】基於XMPP的即時通訊解決方案
- XMPP協議介紹協議
- STOMP協議——基於Websocket實現協議Web
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- ActiveMQ支援的訊息協議MQ協議
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- XMPP協議的原理介紹協議
- Spring+Websocket實現訊息的推送SpringWeb
- 基於公共信箱的全量訊息實現
- HTTP協議訊息頭HTTP協議
- iOS 訊息推送原理及實現DemoiOS
- Android基於XMPP Smack openfire 開發的聊天室(一)【會議服務、聊天室列表、加入】AndroidMac
- 基於XMPP實現android客戶端與伺服器的互動Android客戶端伺服器
- 深入 RPC 訊息協議RPC協議
- 基於xmpp openfire smack開發之smack類庫介紹和使用[2]Mac
- 基於xmpp openfire smack開發之Android客戶端開發[3]MacAndroid客戶端