基於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,來向指定使用者推送訊息。
相關文章
- iOS實現XMPP通訊(一)搭建OpenfireiOS
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 基於XMPP協議開發Android即時通訊軟體協議Android
- 基於Netty實現自定義訊息通訊協議(協議設計及解析應用實戰)Netty協議
- SpringBoot 實戰 (十六) | 整合 WebSocket 基於 STOMP 協議實現廣播訊息Spring BootWeb協議
- 基於workerman實現的web訊息推送站內信功能Web
- workerman 實現訊息推送
- 微信雲託管 WebSocket 實戰:基於模版實現訊息推送Web
- WebSocket 實現伺服器訊息推送客戶端Web伺服器客戶端
- STOMP協議——基於Websocket實現協議Web
- Flutter websocket 實現訊息推送FlutterWeb
- iOS實現XMPP通訊(二)XMPP程式設計iOS程式設計
- Python 基於 TCP 傳輸協議的網路通訊實現PythonTCP協議
- Golang《基於 MIME 協議的郵件資訊解析》部分實現Golang協議
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- ActiveMQ支援的訊息協議MQ協議
- 基於公共信箱的全量訊息實現
- 基於 IJKPlayer-concat 協議的視訊無縫拼接技術實現協議
- Android 基於Netty的訊息推送方案之Hello World(一)AndroidNetty
- 深入 RPC 訊息協議RPC協議
- HTTP協議訊息頭HTTP協議
- Socket.D 基於訊息的響應式應用層網路協議協議
- 實時訊息推送整理
- Android學習筆記--基於XMPP的即時通訊Android筆記
- 7種 實現web實時訊息推送的方案,7種!Web
- 基於SpringBoot+STOMP協議實現的web聊天室Spring Boot協議Web
- 基於Netty實現Redis協議的編碼解碼器NettyRedis協議
- 訊息的即時推送——net實現、websocket實現以及socket.io實現Web
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- 基於APNs最新HTTP/2介面實現iOS的高效能訊息推送(服務端篇)HTTPiOS服務端
- Android 基於Netty的訊息推送方案之概念和工作原理(二)AndroidNetty
- 實時訊息推送方案-SSE
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- HTTPSQS:基於 HTTP協議的輕量級開源簡單訊息佇列服務HTTP協議佇列
- MQTT協議 -- 訊息報文格式MQQT協議
- 通訊協議protobuf的原理與實現協議
- 網路協議之:WebSocket的訊息格式協議Web