MQTT 類似於客戶端和服務器之間的一個觀察者模式,客戶端向服務器訂閱消息主題,如果有另外一個客戶端向該主題發佈一個消息,服務器就會將該消息推送到訂閱了該主題的所有客戶端,當然如果這個客戶端沒有在線,服務器會講該消息存儲到數據庫,並且在這個客戶端上線時講該消息推送給客戶端。
下面我們用圖來理解一下它的工作過程,比如客戶端想訂閱一個名字爲hello的主題,則它們先想服務器sub(訂閱)該主題。
如上圖,客戶端1、客戶端2、客戶端3分別訂閱了”hello”主題,然後客戶端4向該主題上發佈消息,此時客戶端1、客戶端2、客戶端3都會收到由客戶端4基於”hello”主題發佈的消息,如下圖。
下面我們配置服務器,我們以對MQTT進行了封裝後的mosquitto爲例。
大家可以去官網尋找最新的下載,現在是2016年4月,最新版本爲mosquitto-1.4.8。官網地址爲:http://mosquitto.org/files/source/
//安裝必要的依賴包
sudo apt-get install libssl-dev uuid-dev libc-ares-dev libc-ares2 g++ -y
wget http://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz
tar -xzvf mosquitto-1.4.8.tar.gz
cd mosquitto-1.4.8
sudo make
sudo make install
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig
以上命令執行沒問題,說明mosquitto已經正常的安裝成功,接下來即爲使用。如下圖,
1.開啓mosquitto服務,執行命令爲
mosquitto -v
mqtt服務跑起來了,會有相關的log信息.
下面四個分別代表客戶端一、客戶端二、客戶端三、客戶端四,客戶端一、二、三都訂閱了”hello”主題,執行訂閱命令爲:
mosquitto_sub -v -t "hello"
客戶端四則向該”hello”主題發送消息,發佈一個”Hi”消息,上圖可以看到客戶端一、二、三已經收到該消息,執行發佈命令如下:
mosquitto_sub -t "hello" -m "Hi"
上面就是一個完整的交互過程。其實這個客戶端可以包括是手機,嵌入式設備等等。
官方給了一個Android的例子,我將其封裝了一下,基本上Android MQTT的開發基於這個例子進行修改就行了。
github:https://github.com/shuangmin/AndroidMQTT