【轉】Mosquitto持久層群推消息實現思路


1 前言

最近在考慮Android平台下基於Mosquitto實現持久層的群消息推送的問題,在這里整理一下思路。以為實現做准備。

Mosquitto項目說明

Mosquitto項目是一個基於IBM MQTT協議的消息通訊服務器端,作者在考慮到Windows以及Linux及其他平台通用性的要求下,采用了select模型。按照模型本身,其所支撐的實時在線用戶不要超過3000為宜。如果需要實現更多用戶的群發,可以參考本博客另外一個文章 Android和iPhone平台的一種集群推送服務架構

3 實現的思路
3.1 Android端用戶下載客戶端安裝,然后啟動允許推送后,生成其唯一ID號。
3.2 客戶端使用該唯一ID號登錄Mosquitto端后,將該ID插入DB Server,如MYSQL,同時將該ID插入Memcached。參考代碼read_handle_server.c的 283行,在這里執行上步說的兩個操作,並將該客戶端在線狀態設置為1.
3.3 當服務器端獲得客戶端退出的消息時,將該客戶端在線狀態設置為0,同時將該客戶端從Memcached移除。參考代碼loop.c的260行和275行。
3.4 當同一客戶端登錄的時候,參考代碼read_handle_server.c的201行。
3.5 參考client/pub_client.c代碼,實現一個獨立的server端。
實現流程:
讀取待發送數據->從memcached中讀取在線用戶->調用mosquitto_publish推送數據到客戶端。

4 server段偽代碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mosquitto_lib_init ( ) ;
mosq  = mosquitto_new (id , NULL ) ;
mosquitto_will_set (mosq ,  true , will_topic , will_payloadlen , will_payload , will_qos , will_retain ) ;
mosquitto_connect_callback_set (mosq , my_connect_callback ) ;
mosquitto_disconnect_callback_set (mosq , my_disconnect_callback ) ;
mosquitto_publish_callback_set (mosq , my_publish_callback ) ;
rc  = mosquitto_connect (mosq , host , port , keepalive ,  true ) ;
MSG iMSGNum  = GetMSG ( ) ;
int iUserNum  = GetUsers (list ) ;
for ( int i  =  0  ; i  <  iUserNum  ; i  ++ )
{
    rc2  = mosquitto_publish (mosq ,  &mid_sent , topic ,  strlen (buf ) ,  ( uint8_t  * )buf , qos , retain ) ;
}
mosquitto_destroy (mosq ) ;
mosquitto_lib_cleanup ( ) ;

5 測試例子

這里使用的是 優狐安卓推送端進行測試。

5.1 啟動Android端的 優狐即時推送客戶端,點擊開啟
5.2 我們可以看到這個topic為 tokudu/155935358
5.3 下載mosquitto的源代碼
5.4 解壓后,make && make install
5.5 執行(這里要注意:出錯)

mosquitto_pub: error while loading shared libraries: libmosquitto.so.0: cannot open shared object file: No such file or directory

這是由於目錄是生成到/usr/local/lib目錄了,應該拷貝到/usr/lib目錄

ln -s /usr/local/lib/libmosquitto.so.0 /usr/lib/libmosquitto.so.0

mosquitto_pub -h familysguardian.com -p 9999 -m sssss -t tokudu/155935358 -d

5.6 在Android端可以看到發送的消息sssss了。

5.7 在Server的實現方面可以完全參考pub_client.c的代碼例子。

6 參考文章
6.1 http://mosquitto.org/download/
6.2 http://mosquitto.org/
6.3 http://doandroid.info/%E5%9B%A2%E9%98%9F%E7%A7%BB%E5%8A%A8%E4%BA%92%E8%81%94%E7%BD%91%E4%BD%9C%E5%93%81%E5%8F%8Ademo/android%E5%8D%B3%E6%97%B6%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E5%B9%B3%E5%8F%B0demo/
6.4 http://familysguardian.com:8888/android_push/send.php
6.5 http://familysguardian.com:8888/android_push/index.php
6.6 http://doandroid.info/2012/03/19/android%E5%92%8Ciphone%E5%B9%B3%E5%8F%B0%E7%9A%84%E4%B8%80%E7%A7%8D%E9%9B%86%E7%BE%A4%E6%8E%A8%E9%80%81%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84/

-END-


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM