MQTT学习笔记
解决问题:
- 服务器必须要实现成千上万客户端的接入
- 单词数据量小,但不能出错
- 必须能够适应高延迟、偶尔断网等通信不可靠的风险
- 根据数据的重要程度和特性,设置不同等级的服务质量
MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,因此易于实现。这些特点使得它对很多场景来说都是很好的选择,包括受限的环境如机器与机器的通信(M2M)以及物联网环境(IoT),这些场景要求很小的代码封装或者网络带宽非常昂贵。
本协议运行在TCP/IP,或其它提供了有序、可靠、双向连接的网络连接上。它有以下特点:
- 使用发布/订阅消息模式,提供了一对多的消息分发和应用之间的解耦。
- 消息传输不需要知道负载内容。
- 提供三种等级的服务质量:
- “最多一次”,尽操作环境所能提供的最大努力分发消息。消息可能会丢失。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久之后会再次发送。
- “至少一次”,保证消息可以到达,但是可能会重复。
- “仅一次”,保证消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。
- 很小的传输消耗和协议数据交换,最大限度减少网络流量。
- 异常连接断开发生时,能通知到相关各方。
mosquitto
mosquitto在Ubuntu16.04环境安装:
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto mosquitto-clients
mosquitto基本操作:
mosquitto -c /etc/mosquitto/mosquitto.conf -p 1883
mosquitto_sub -t "temp"
mosquitto_pub -t "temp" -m "hello"
更多参数选择操作:
mosquitto_sub -d -v -t temp -h 127.0.0.1 -p 1883 -q 2 mosquitto_pub -d -t temp -h 127.0.0.1 -p 1883 -m hello -q 2
mosquitto非匿名登录配置:
服务端创建用户:
sudo mosquitto_passwd -c /etc/mosquitto/passwd.conf hg #隐藏密码创建
sudo mosquitto_passwd -b /etc/mosquitto/passwd.conf zs 11111 #明文密码创建
修改配置/etc/mosquitto/mosquitto.conf
allow_anonymous false #true表示允许匿名登录,false启动用户验证
password_file /etc/mosquitto/passwd.conf #用户账号信息文件存放位置