What's MQTT?
消息队列遥测传输(英语:Message Queuing Telemetry Transport,MQTT)是ISO 标准(ISO/IEC PRF 20922)下基于发布(Publish)/订阅(Subscribe)范式的消息协议,可视为“资料传递的桥梁”.它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议.为此,它需要一个消息中间件(如HTTP),以解决当前繁重的资料传输协议.
以上是维基百科上的定义,不用管.
用人话说就是,有一个接线员,所有的设备向他“注册”,告诉他我要更新什么数据(Publish),或者是我要监听什么数据(Subscribe).当某个设备更新了某个数据后,这个接线员会查阅记录表,给所有订阅了这个数据的设备发送一条消息,告诉它该数据的变化.
详细的技术细节,比如QoS、心跳等,为了保证本教程的简单易懂,此处不多赘述,在后续需要用到的时候,再详细展开.有兴趣的读者可以先行查阅维基百科等网页来了解.
服务端——EMQX
正如本系列上一篇文章中所讲的,我们选用了EMQX这一开源MQTT服务器.
在此我们根据自己的系统选择合适的选项,即可看到详细的安装步骤,照做就好.
客户端——MQTTX
为了方便调试服务器,我们还需要一个客户端,让我们可以自己扮演一个设备,订阅或是更新数据.
MQTTX在我体验过后是一款UI美观,功能全面的教科书级的客户端,可以在这里下载.
简单测试
有了客户端和服务端,我们便可以简单地来测试一下了.
首先我们访问刚才创建的EMQX的网页,用默认用户名密码(admin, public)登陆(这个用户名密码和后续客户端连接时用的一样)登陆.
找到监听器,这里制定了各种设备可以通过什么方式和这个MQTT服务器通讯,点击绿色的名称部份可以对每一项进行调整.
默认状态下,设备和服务器的通讯,包括你访问这个Dashboard的连接,都是基于明文传输的.如果你担心安全,这里我们还可以添加TLS验证,如果你有证书,可以自己上传一下,在后续设备端程序设计中会讲设备端怎么使用TLS.
什么?你还想把Dashboard改成支持Https的?这里给出一段配置代码,不多赘述了,请根据实际情况自己修改相应的配置项.
#/etc/emqx/emqx.conf
...
dashboard {
token_expired_time = 60m
cors = false
listeners.http {
bind = "0.0.0.0:18083"
}
listeners.https {
bind = "0.0.0.0:18084"
num_acceptors = 8
max_connections = 512
backlog = 1024
send_timeout = 10s
inet6 = false
ipv6_v6only = false
proxy_header = false
cacertfile = "/etc/ssl/mqtt/ca.crt"
certfile = "/etc/ssl/mqtt/cert.pem"
keyfile = "/etc/ssl/mqtt/key.key"
verify = verify_none
reuse_sessions = true
depth = 10
versions = [tlsv1.3, tlsv1.2]
ciphers = ["TLS_AES_256_GCM_SHA384","TLS_AES_128_GCM_SHA256"]
secure_renegotiate = true
log_level = notice
hibernate_after = 5s
honor_cipher_order = true
client_renegotiation = true
handshake_timeout = 15s
}
}
...
这样,服务端的配置算是告一段落,接下来我们还需要使用客户端来调试.
我们在MQTTX中新建一个连接,如果你顺利走到这里,那么相比你可以自我填写所有的信息.
注意,Client ID相当于你这个设备的名字,比如“卧室里的灯泡”、“厨房里的空气炸锅”之类的,当然了,别出现中文字符.
其实这东西,还有Topic,一般也是有不成文的命名规范的,可以参考一些文档:
亚马逊的文档(目前只有英文)
EMQX的文档(中文)
配置好客户端之后,我们就可以尝试创建我们的第一个主题(Topic)了.如下图,在“聊天框”中输入随便什么内容,上方有个小输入框,用来输入你的主题名称,最后点击纸飞机发送.
我们再自己订阅(Subscribe)一下刚创建的主题.
我们再尝试发送一个更新的信息,发现服务器给出了我们订阅的主题更新的消息.
至此,我们便成功创建好了一个MQTT服务器,基本掌握了MQTT的调试技能.
Comments NOTHING