`
longgangbai
  • 浏览: 7251141 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MQTT的学习研究(十)【转】mosquitto——一个开源的mqtt代理

阅读更多

        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连接。

 

转自

http://www.cnblogs.com/aaronwxb/archive/2012/07/20/2601509.html

 

分享到:
评论

相关推荐

    Eclipse Mosquitto-一个开源MQTT代理-C/C++开发

    它还包括一个C和C ++客户端库,以及用于publi Eclipse Mosquitto的mosquitto_pub和mosquitto_sub实用程序Mosquitto是MQTT协议版本3.1和3.1.1的服务器的开源实现。 它还包括一个C和C ++客户端库,以及用于发布和订阅...

    MQTT开源库mosquitto

    Mosquitto是一个开源(BSD许可证)的消息代理,实现MQTT(消息队列遥测传输)协议版本3.1.1。 MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议,适用于一些条件比较苛刻的环境,进行低...

    用java写的mqttbroker,实现mqtt中转通信,与mosquitto一样的功能

    用java写的mqttbroker,实现mqtt中转通信,与mosquitto一样的功能 代码简洁明了,可以多次开发,方便部署至各种服务器 包非常小,仅仅3.24MB

    websocket连接MQTT服务器所用的js文件——mqtt.js和mqtt.min.js

    mqtt.js库,下载后可以用找我要源码和压缩文件(mqtt.min.js),有问题随时请教

    Eclipse Mosquitto一个开源的MQTT代理

    Mosquitto 是 5.0、3.1.1 版服务器的开源实现。 和 MQTT 协议的 3.1。它还包括一个 C 和 C++ 客户端库

    mosquitto+gmssl编译,建立国密的MQTT消息通道

    mosquitto+gmssl编译,利用国密算法,加密ssl通道,建立国密的MQTT消息通道。不再使用国外算法,是加密通道国密化的必备方式

    MQTT mosquitto客户端Java库

    MQTT mosquitto客户端Java库

    MQTT(mosquitto)测试工具.zip

    亲测有效,测试MQTT(mosquitto)中间件服务器的好工具。觉得好用的给个好评,点个赞,谢谢!

    支持ws的mosquitto

    支持mqtt ws的mosquitto程序文件。Eclipse Mosquitto is an open source (EPL/EDL licensed) message broker that implements the MQTT protocol versions 3.1 and 3.1.1. Mosquitto is lightweight and is suitable...

    MQTT客户端,和mosquitto_pub.exe功能一样_VS2010 C++源码

    找遍整个网络,发现所有的发布和订阅客户端都是使用的java,php或安卓,这对C++程序员伤不起,于是花了两天时间研究源代码,写了这个demo,和mosquitto_pub.exe的功能一样,网络唯一,对研究MQTT协议的C++程序员很...

    windows编译的mosquitto(mqtt)

    windows编译的mosquitto(mqtt),可以直接下载使用。

    MQTT服务器 mosquitto-1.6.10a-install-windows-x64.exe

    一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制...

    C# MQTT通信 全开源项目

    使用一个开源的技术来与MQTT通信,使用的是基于以太网的TCP/IP实现,不需要额外的组件,读取操作只要放到后台线程就不会卡死线程,本组件支持超级方便的高性能读写操作 1)附件C#代码全开源,所有代码公开,不使用第...

    一个开源的MQTT消息代理服务,解压即可部署使用

    一个开源的MQTT消息代理服务,它提供了一种轻量级MQTT协议的发布/订阅消息传输方式的服务。可广泛应用于物联网(IoT)、移动应用、车载系统等场景 可以使用Mosquitto自带的命令行工具mosquitto_sub和mosquitto_pub作为...

    MQTT、XMPP、GCM、Mosquitto资料合集

    Android推送方案分析(MQTT、XMPP、GCM).doc Android推送服务(GCM) .doc GCM:入门.doc Mosquitto简要教程(安装&使用).doc 开源broker软件mosquitto(mqtt v3.1支持协议).doc 采用MQTT协议实现Android消息推送.doc

    mosquitto:Eclipse Mosquitto-开源MQTT代理

    Eclipse蚊子Mosquitto是MQTT协议的版本5.0、3.1.1和3.1的服务器的开源实现。 它还包括一个C和C ++客户端库,以及用于发布和订阅的mosquitto_pub和mosquitto_sub实用程序。链接有关MQTT的更多信息,请参见以下链接: ...

    MQTT开源消息服务介绍

    EMQTT(http://emqtt.io/)是目前全球物联网市场排名第一的开源MQTT消息服务。全球市场(印度、北美、欧洲、中国) 累计4000+用户,1000万线MQTT连接部署。中国市场部分物联网公司,包括智能硬件、智能家居、移动消息、...

    cpp-Mosquitto是MQTT协议版本31和311的服务器的开源实现

    Mosquitto是MQTT协议版本3.1和3.1.1的服务器的开源实现。 它还包括一个C和C 客户端库,以及用于发布和订阅的mosquitto_pub和mosquitto_sub实用程序。

    mqtt-mosquitto-ws

    mqtt支持ws的mosquitto工具和node测试Demo;该压缩包已包含了所有需要的DLL,上一次资源中缺少部分DLL,mosquitto在一些电脑上不能运行。测试方法:mosquitto -c mosquitto.conf -v,正常开启后会显示websocket 已...

    MQTT2ModbusTCP

    实现MQTT协议转到ModbusTCP slave设备

Global site tag (gtag.js) - Google Analytics