mosquitto 使用详解
MQTT(MQ Telemetry Transport),消息队列遥测传输协议, 轻量级的发布/订阅协议, 适用于一些条件比较苛刻的环境, 进行低带宽、不可靠或间歇性的通信 。值得一提的是mqtt提供三种不同质量的消息服务:
- “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
- “至少一次”,确保消息到达,但消息重复可能会发生。
- “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
下面是比较详细的介绍链接。
MQ 遥测传输 (MQTT) V3.1 协议规范:
http://www.ibm.com/developerworks/cn/webservices/ws-mqtt/index.html
而mosquitto是一个开源broker,并且支持MQTTv3.1,支持客户端的验证。mosquitto包括服务端和客户端。
mosquitto_pub 客户端可发布一条消息到指定主题:
用法:
mosquitto_pub [-d] [-h hostname] [-i client_id] [-I client id prefix] [-p port number] [-q message QoS] [--quiet] [-r] { -f file | -l | -m message | -n | -s} [-u username [-P password] ] [ --will-topic topic [--will-payload payload] [--will-qos qos] [--will-retain] ] -t message-topic
选项:
-d, --debug
开启debug选项
-f, --file
把一个文件的内容做为消息的内容发送。经测试,支持txt文件,不支持doc等其他形式文件。
-h, --host
说明所连接到的域名,默认是localhost
-i, --id
客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和--id_prefix同时使用。
-I, --id-prefix
指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能喝--id同时使用。
-l, --stdin-line
从总段读取输入发送消息,一行为一条消息,空白行不会被发送。
-m, --message
从命令行发送一条消息,-m后面跟发送的消息内容。
-n, --null-message
发送一条空消息。
-p, --port
连接的端口号,默认是1883.
-P, --pw
指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, --qos
指定消息的服务质量,可以为0,1,2,默认是0.
--quiet
如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。
-r, --retain
如果指定该选项,该条消息将被保留做为最后一条收到的消息。下一个订阅消息者将能至少收到该条消息。
-s, --stdin-file
从标准输入接收传输的消息内容,所有输入做为一条消息发送。
-t, --topic
指定消息所发布到哪个主题。
-u, --username
指定用户名用于代理认证。
--will-payload
如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用--will-topic指定主题。
--will-qos
指定Will的服务质量,默认是0.必须和选项 --will-topic同时使用.
--will-retain
如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 --will-topic同时使用.
--will-topic
指定客户端意外断开时,Will消息发送到的主题。
sub_client客户端订阅一个或多个主题的消息:
用法:
mosquitto_sub [-c] [-d] [-h hostname] [-i client_id] [-I client id prefix] [-k keepalive time] [-p port number] [-q message QoS] [--quiet] [-v] [ -u username [-Ppassword] ] [ --will-topic topic [--will-payload payload] [--will-qos qos] [--will-retain] ] -t message topic ...
命令:
mosquitto_sub 订阅到主题,接收到消息时打印
选项:
-c, --disable-clean-session
禁止'clean session'选项,即如果客户端断开连接,这个订阅仍然保留来接收随后到的QoS为1和2的消息,当改客户端重新连接之后,它将接收到已排在队列中的消息。建议使用此选项时,客户端id选项设为--id
If using this option, it is recommended that the client id is set manually with --id
-d, --debug
开启debug选项
-h, --host
说明所连接到的域名,默认是localhost
-i, --id
客户端的ID号,如果没有指定,默认是mosquitto_pub_加上客户端的进程id,不能和--id_prefix同时使用。
-I, --id-prefix
指定客户端ID的前缀,与客户端的进程ID连接组成客户端的ID,不能喝--id同时使用。
-k, --keepalive
给代理发送PING命令(目的在于告知代理该客户端连接保持且在正常工作)的间隔时间,默认是60s
-p, --port
说明客户端连接到的端口,默认是1883
-P, --pw
指定密码用于代理认证,使用此选项时必须有有效的用户名。
-q, --qos
指定消息的服务质量,可以为0,1,2,默认是0.
--quiet
如果指定该选项,则不会有任何错误被打印,当然,这排除了无效的用户输入所引起的错误消息。
-t, --topic
指定订阅的消息主题,允许同时订阅到多个主题
-u, --username
指定用户名用于代理认证。
-v, --verbose
冗长地打印收到的消息。若指定该选项,打印消息时前面会打印主题名——“主题 消息内容”,否则,只打印消息内容
--will-payload
如果指定该选项,则万一客户端意外和代理服务器断开,则该消息将被保留在服务端并发送出去,该选项必须同时用--will-topic指定主题。
--will-qos
指定Will的服务质量,默认是0.必须和选项 --will-topic同时使用.
--will-retain
如果指定该选项,则万一客户端意外断开,已被发送的消息将被当做retained消息。必须和选项 --will-topic同时使用.
--will-topic
指定客户端意外断开时,Will消息发送到的主题。
报文种类
1.连接请求(CONNECT)
当一个从客户端到服务器的TCP/IP套接字连接被建立时,必须用一个连接流来创建一个协议级别的会话。
2.连接请求确认(CONNECTACK)
连接请求确认报文(CONNECTACK)是服务器发给客户端,用以确认客户端的连接请求
3.发布报文(PUBLISH)
客户端发布报文到服务器端,用来提供给有着不同需求的订阅者们。每个发布的报文都有一个主题,这是一个分层的命名空间,他定义了报文来源分类,方便订阅者订阅他们需要的主题。订阅者们可以注册自己的需要的报文类别。
4.发布确认报文(PUBACK)
发布确认报文(PUBACK)是对服务质量级别为1的发布报文的应答。他可以是服务器对发布报文的客户端的报文确认,也可以是报文订阅者对发布报文的服务器的应答。
5.发布确认报文(PUBREC)
PUBREC报文是对服务质量级别为2的发布报文的应答。这是服务质量级别为2的协议流的第二个报文。PUBREC是由服务器端对发布报文的客户端的应答,或者是报文订阅者对发布报文的服务器的应答。
6.发布确认报文(PUBREL)
PUBREL是报文发布者对来自服务器的PUBREC报文的确认,或者是服务器对来自报文订阅者的PUBREC报文的确认。它是服务质量级别为2的协议流的第三个报文。
7.确定发布完成(PUBCOMP)
PUBCOMP报文是服务器对报文发布者的PUBREL报文的应答,或者是报文订阅者对服务器的PUBREL报文的应答。它是服务质量级别为2的协议流的第四个也是最后一个报文。
8.订阅命名的主题(SUBSCRIBE)
订阅报文(SUBSCRIBE)允许一个客户端在服务器上注册一个或多个感兴趣的主题名字。发布给这些主题的报文作为发布报文从服务器端交付给客户端。订阅报文也描述了订阅者想要收到的发布报文的服务质量等级。
9. 订阅报文确认(SUBACK)
当服务器收到客户端发来的订阅报文时,将发送订阅报文的确认报文给客户端。一个这样的确认报文包含一列被授予的服务质量等级。被授予的服务质量等级次序和对应的订阅报文中的主题名称的次序相符。
10. 退订命名的主题(UNSUBSCRIBE)
退订主题的报文是从客户端发往服务器端,用以退订命名的主题。
11. 退订确认(UNSUBACK)
退订确认报文是从服务器发往客户端,用以确认客户端发来的退订请求报文。
12. Ping请求(PINGREQ)
Ping请求报文是从连接的客户端发往服务器端,用来询问服务器端是否还存在。
13. Ping应答(PINGRESP)
Ping应答报文是从服务器端发往Ping请求的客户端,对客户端的Ping请求进行确认。
14. 断开通知(DISCONNECT)
断开通知报文是从客户端发往服务器端用来指明将要关闭它的TCP/IP连接,他允许彻底地断开,而非只是下线。如果客户端已经和干净会话标志集联系,那么所有先前关于客户端维护的信息将被丢弃。一个服务器在收到断开报文之后,不能依赖客户端关闭TCP/IP连接。
mosquitto 使用详解相关推荐
- mosquitto库函数详解
mosquitto库函数 (1)mosquitto_lib_init (2)mosquitto_lib_cleanup (3)mosquitto_new (4)mosquitto_destroy (5 ...
- webSocket详解
前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo: iOS即时通讯,从入门到&quo ...
- IoT:MQTT协议详解
IoT -- (七)MQTT协议详解 转自:https://blog.csdn.net/anxianfeng55555/article/details/80908795 MQTT是什么? MQTT(M ...
- MQTT协议详解,非常易懂
MQTT协议详解一 协议地址:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html 当然也有PDF版的,百度 ...
- Linux /etc/passwd和etc/shadow 详解
Linux /etc/passwd 内容 Linux 系统中的 /etc/passwd 文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作. [root@l ...
- 物联网数据传输协议MQTT介绍与应用开发详解
本文首发微信公众号:码上观世界 Part 1 物联网概述 1. 物联网概念 物联网是指通过各种信息传感器.射频识别技术.全球定位系统.红外感应器.激光扫描器等各种装置与技术,实时采集任何需要监控. 连 ...
- 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)
首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...
- JVM年轻代,老年代,永久代详解
秉承不重复造轮子的原则,查看印象笔记分享连接↓↓↓↓ 传送门:JVM年轻代,老年代,永久代详解 速读摘要 最近被问到了这个问题,解释的不是很清晰,有一些概念略微模糊,在此进行整理和记录,分享给大家.在 ...
- docker常用命令详解
docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...
最新文章
- 最新综述:车辆重识别技术
- 电容的容量随着电压的变化而变化
- 【计算机视觉】OpenCV的最近邻开源库FLANN
- Android允许应用程序使用Http明文网络传输
- 意大利终于付出了代价
- 人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法
- “我在苹果商店下载了一个诈骗App,损失60万美金!”
- 华为机试HJ37:统计每个月兔子的总数(斐波那契数列)
- Linux 学习手记(5):使用Vim文本编辑器
- 对360搜索引擎的评价
- 日本电子业转型的东芝之困:多年亏损 后有强敌追兵
- Julia : 如何生成一个水仙花数?
- Cleaner Robot - CodeForces	589J(搜索)
- i2c-tools安装与使用总结
- SpringBoot整合Mybatis与JDBC连接池
- CISP证书有什么作用?考试难度大吗?
- 三基色、对比色、互补色之间的关系,图片调色基础
- 密文编码与加密算法应用
- Linux进程管理命令之accton/lastcomm
- Redis知识点整理(详讲)