初始mqtt服务
2020-02-17 00:24
330 查看
MQTT入门
概念
mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议。由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发。
协议格式
mqtt协议控制报文的格式包含三部分:
以固定报头、可变报头和有效载荷,其中固定报文头是所有控制报文都有的,可变报头和有效载荷都是部分控制报文。
mqtt是二进制的协议,控制字段是精确到Bit级别的,单纯这一点就足以为其在物联网领域占据一席之地。mqtt是不支持分包等机制,并不适宜一些数据包特别大的应用场景。
mqtt特性
- 使用发布/订阅消息模式,提供一对多消息发布;
- 对负载内容屏蔽的消息传输;
- 使用TCP/IP进行网络连接;
- 具有三种消息发布服务质量选项:
- 1."至多一次",通常app的推送使用的是这种模式,也就是说,如果移动设备在消息推送的时候没有联网,那么再次联网就不会收到通知了;
- 2."至少一次",可以确保消息收到,但消息可能会重复;
- 3."只有一次",确保消息到达一次,比如计费系统,如果出现消息重复或者丢失会导致系统结果不正确的问题。
- 小型传输,开销很小,协议交换最小化,以降低网络流量;
- 通知有关各方客户端异常中断的机制。
mqtt协议实现方式
发布者----发布消息---->代理-------推送消息----->订阅者 发布者----发布消息---->代理<------订阅消息-----订阅者
在mqtt协议中有三种身份:
- 发布者(publish):发布者是客户端,可以进行发布消息
- 代理(broker):代理指的是服务器,比较有名的是emqtt,当前可以其他成熟的框架去搭建mqtt服务
- 订阅者(subscribe):指的客户端,不过发布者同时也可以是订阅者。
mqtt服务端和客户端实现的功能
mqtt服务端
- 接受来自客户端的网络连接;
- 接受客户发布的应用信息;
- 处理来自客户端主题订阅和退订请求;
向订阅的客户端转发应用程序消息
mqtt客户端
- 给其他客户端发布订阅的消息;
- 订阅其他客户端发布的消息;
- 退订和订阅主题;
断开服务器连接
mqtt协议中的方法
- connect:等待服务器建立连接;
- disconnect:等待客户端完成所做的工作,并与服务器断开TCP/IP会话;
- subscribe:主题订阅;
- unsubscribe:主题取消订阅;
- publish:发送消息
mqtt的安装
# sudo yum install epel-release # sudo yum install mosquitto mosquitto-clients # sudo systemctl start mosquitto mqtt默认是以1883端口运行的
mqtt简单使用
mosquitto的配置文件为/etc/mosquitto/mosquitto.conf/ 1.添加密码配置并且不允许匿名用户登录 # sudo vim /etc/mosquitto/mosquitto.conf allow_anonymous false #不允许匿名登录 password_file /etc/mosquitto/pwfile #配置用户密码文件 acl_file /etc/mosquitto/aclfile # 配置topic和用户 2.添加用户信息 # mosquitto_passwd -c /etc/mosquitto/pwfile ceshi # mosquitto_passwd /etc/mosquitto/pwfile ceshi2 分别添加用户ceshi和ceshi2 3.添加topic和用户的关系(权限配置) # sudo vim /etc/mosquitto/aclfile # ceshi只能发布V222为前缀的主题,订阅V333开头的主题 user ceshi topic write V222/# topic read V333/# # ceshi2只能订阅以V222为前缀的主题 user ceshi2 topic read V222/# - write:发布订阅 - read:接受订阅 4.启动 -c :指定配置文件启动 -d: 后台运行 mosquitto -c /etc/mosquitto/mosquitto.conf -d 5.测试 发布订阅:mosquitto_pub 接受订阅:mosquitto_sub 参数: -h :服务器主机 -t :指定主题 -u :用户名 -P : 密码 -i :客户端id -m :发布的消息内容 # mosquitto_sub -h localhost -t "V222" -u ceshi2 -P 123456 # mosquitto_pub -h localhost -t "V222" -m "Hello world" -u ceshi -P 123455
配置文件解析
# 系统状态的刷新时间 # sys_interval 10 # 系统资源的回收时间,0表示尽快处理 # store_clean_interval 10 # 服务进程的pid # pid_file /var/run/mosquitto.pid # 服务进程的系统用户 # user mosquitto # 客户端心跳消息的最大并发数 # max_inflight_messages 10 # 客户端心跳消息缓存队列 # max_queued_messages 100 # 用于设置客户端长连接的过期时间,默认永不过期 # persistent_client_expiration # 服务绑定的IP地址 # bind_address # 服务绑定的端口 # port 1883 # 消息自动保存的间隔时间 # autosave_interval 1800 # 消息自动保存功能的开关 # autosave_on_changes false # 持久化功能的开关 # persistence true # 持久化DB文件 # persistence_file mosquitto.db # 持久化DB文件目录 # persistence_location /var/lib/mosquitto/ # 4种日志模式: stdout、stderr、syslog、topic # none:则表示不记录日志 log_dest none # 选择日志的级别 # log_type error # log_type warning # log_type notice # log_type information # 是否记录客户端连接信息 # connection_messages true # 是否记录日志时间 # log_timestamp true # 允许匿名用户 # allow_anonymous false # 用户/密码文件,默认格式为:user/passwd # password_file /etc/mosquitto/passwd
转载于:https://www.cnblogs.com/l-mac/p/11486539.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Qt Creator在OS X系统上的安装
- QT中通过QProcess调用adb命令完成PC端文件传输到安卓
- QT学习笔记一
- 【QT】自我学习笔记第二章——简单的按钮及槽
- 【QT】自我学习笔记第三章——菜单与工具栏
- 【QT】自我学习笔记第四章——整合一个小项目
- 【QT】自我学习笔记第五章——QT+OPENGL的开始
- Qt学习笔记——connect()函数的使用
- PyCharm配置QtDesigner
- pyqt5无法安装的解决方法
- PyQt5.Qtimer模块调用返回QObject::startTimer: Timers can only be used with threads started with QThread的问题
- ubuntu 12.04下安装Qt遇到的问题
- 已解决 Qt5.12连接MySQL 8.0的问题:QSqlDatabase: QMYSQL driver not loaded
- 基于微服务和mini2440的WebSocket B/S视频监控及MQTT物联网应用系统
- [QT][Qchart][CreateDefaultaxis]
- QT 如何设置series的图例名称
- qt qchartview如何关闭矩形框缩放功能
- Qt遇到“Cannot run compiler 'clang++' out ”
- QT 调试时出现“The GDB Terminated unexceptly(exit code 3)”解决办法
- PyQt5开发环境配置并使用