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