mqtt

MQTT X v1.3.0 正式发布

孤街浪徒 提交于 2020-03-19 11:12:19
3 月,跳不动了?>>> MQTT X 是由全球领先的 开源物联网中间件 提供商 EMQ 开源的一款跨平台 MQTT 5.0 桌面测试客户端,它支持 macOS,Linux,Windows。MQTT X 的用户界面借助聊天软件的形式简化了页面的操作逻辑,用户可以快速创建多个同时在线的 MQTT 客户端 ,方便测试 MQTT/TCP、MQTT/TLS 的连接/发布/订阅功能及其他 MQTT 协议 特性。 MQTT X 网站: https://mqttx.app MQTT X v1.3.0 版本下载: https://github.com/emqx/MQTTX/releases/tag/v1.3.0 新功能概览 支持 WebSocket 连接 该版本中,新增了对 WebSocket 的连接支持,在新建连接的页面中, Host 前的下拉框可以选择连接协议,支持 mqtt:// , ws:// ,如果是 SSL/TLS 认证连接的话,需要选择为 mqtts:// , wss:// 。当协议选项是 ws 或 wss 时,创建的连接即为 WebSocket 连接。 注意 :当协议变化时,需要修改连接的端口。 支持对 Payload 的格式转化 该版本中,对 Payload 的输入框进行了输入编辑时的优化。实现了对 JSON 格式的语法高亮,格式验证等功能,用户可以很方便的在输入框内进行

IoT名词解释

大憨熊 提交于 2020-03-18 17:00:43
EMQ: 百万级分布式开源物联网MQTT消息服务器。 一般是emq broker暴露MQTT的1883/ MQTTS的8883端口,现场的许多网关通过MQTT协议作为MQTT client与emq进行pub/ sub消息。 特点: 完全开放源码 基于Apache Version 2.0开源协议 百万级并发连接 单节点100万并发MQTT连接峰值负载 完整MQTT协议支持 MQTT V3.1.1协议规范QoS0/1/2消息支持 简便安装部署 跨平台部署在Linux、FreeBSD、Mac OS X或Windows服务器 分布式集群或桥接 双节点负载均衡或多节点分布式集群 扩展模块与插件 LDAP, MySQL, PostgreSQL, Redis, MongoDB扩展插件集成 EMQ 程序包下载 EMQ 消息服务器每个版本会发布 Ubuntu、CentOS、FreeBSD、Mac OS X、Windows 平台程序包与 Docker 镜像。 下载地址: http://emqtt.com/downloads Docker: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 来源: https://www

EMQ X 认证鉴权(二)- EMQ X 中 MQTT 连接认证核心概念与配置要点

五迷三道 提交于 2020-03-17 12:12:12
某厂面试归来,发现自己落伍了!>>> 前言 安全保护几乎对于所有的项目都是一个挑战,对于物联网项目更是如,自普及应用以来物联网业内已经发生过多起安全事故。 作为物联网通信协议事实标准,MQTT 协议保持着较高的安全性,提供了多层次的安全设计: 传输层:MQTT 基于 TCP/IP 协议,可以在传输层上使用 SSL/TLS 进行加密传输: 使用 SSL/TLS 加密通信数据,防止中间人攻击; 使用客户端证书作为设备身份凭证,验证设备合法性。 应用层:使用 MQTT 自身的安全特性进行防护: MQTT 协议支持用户名和密码实现客户端的身份校验; MQTT Broker 实现了 Topic 的读写权限控制(Topic ACL)。 EMQ X MQTT Broker 完整支持 MQTT 协议 各项安全规范,内置的安全功能无需编程开箱即用,可以快速排除项目中的安全隐患。 EMQ X 认证鉴权 系列将围绕各个层次的安全规范,介绍如何通过配置 EMQ X 启用相关功能最终实现相应的安全防护。 本文将围绕 EMQ X 中 MQTT 连接认证相关的核心概念,介绍 EMQ X 支持的认证方式及其适用场景,并从工作机制和配置原则上阐述 EMQ X 认证相关的认证链、认证流程/原理以及相关的配置要点等信息,让你快速掌握 EMQ X 认证配置方式。 认证方式 EMQ X 支持使用内置数据源(文件、内置数据库

mqtt中参数的实际意义

笑着哭i 提交于 2020-03-17 11:08:12
保留消息Retained Messages: publis消息的时候设置的参数、当客户端或者服务器publish一条消息的时候将消息Retain标志设置为1,则服务器端会保存当前topic下的最后一条消息,当有新的客户端订阅这个topic时候,服务器会马上将此topic下的保留消息下发给它。 A retained message is a normal MQTT message with the retained flag set to true. The broker will store the last retained message and the corresponding QoS for that topic Each client that subscribes to a topic pattern, which matches the topic of the retained message, will receive the message immediately after subscribing. For each topic only one retained message will be stored by the broker. 清除会话Clean Session 清除会话标志是在客户端连接服务器的时候需要设置的参数、当客户端设置清除会话标志为0

EMQ X 配置说明

依然范特西╮ 提交于 2020-03-10 16:40:19
简介 EMQ X Broker 的配置文件通常以 .conf 作为后缀名,你可以在 etc 目录找到这些配置文件,主要配置文件包括: 配置文件 说明 etc/emqx.conf EMQ X Broker 配置文件 etc/acl.conf EMQ X Broker 默认 ACL 规则配置文件 etc/plugins/*.conf EMQ X Broker 扩展插件配置文件 需要注意的是,通过不同方式安装的 EMQ X Broker, etc 目录所处的路径可能不同。 语法规则 采用类似 sysctl 的 k = v 通用格式 单个配置项的所有信息都在同一行内,换行意味着创建一个新的配置项 键可以通过 . 进行分层,支持按树形结构管理配置项 值的类型可以是 integer , fload , percent , enum , ip , string , atom , flag , duration and bytesize 任何以#开头的行均被视为注释 示例: mqtt.max_packet_size = 1MB 数据类型 integer 整型数据。 float 浮点型数据。 percent 以 % 结尾的百分比数据,最终会被转换为 float 类型。 enum 通常我们会在类型为 enum 的配置项附近列出它的所有可选值。 ip 当你看到某个配置项的数据类型为 ip 时

[ARM入门] 迅为i.MX6开发板mqtt 移植教程(二)

倾然丶 夕夏残阳落幕 提交于 2020-03-10 16:34:43
把 mosquitto 移植到开发板 在 Ubuntu 的/home/topeet/下创建一个 mqtt-arm 的文件夹,如下图所示: 我们进入我们安装的 mosquitto-1.5 目录下,作者这里是安装在了/opt/mosquitto-arm 下,如下图所示: 我们把当前路径下的/etc/mosquitto/下的 mosquitto.conf.example 文件拷贝到我们在/home/topeet/下创建一个 mqtt-arm 的文件夹,命令如下: cp mosquitto.conf.example /home/topeet/mqtt-arm/ 如下图所示 然后我们返回到 mosquitto 的安装目录,我们进到安装目录下 mosquitto- 1.5/usr/local/bin 下面,如下图所示: 我们把这个目录下所有文件拷贝到我们在/home/topeet/下创建一个 mqtt-arm 的文件夹,命令如下: cp ./* /home/topeet/mqtt-arm/ 如下图所示: 然后我们返回到 mosquitto 的安装目录,我们进到安装目录下 mosquitto- 1.5/usr/local/sbin 下面,如下图所示: 我们把这个目录下的 mosquitto 二进制文件拷贝到我们在/home/topeet/下创建一个mqtt-arm 的文件夹,命令如下:

MQTT入门教程(一)

陌路散爱 提交于 2020-03-09 08:56:20
MQTT 入门介绍 一、简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 二、设计规范 由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则: (1)精简,不添加可有可无的功能; (2)发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递; (3)允许用户动态创建主题,零运维成本; (4)把传输量降到最低以提高传输效率; (5)把低带宽、高延迟、不稳定的网络等因素考虑在内; (6)支持连续的会话控制; (7)理解客户端计算能力可能很低; (8)提供服务质量管理; (9)假设数据不可知

mqtt协议-broker之moqutte源码研究二之Connect报文处理

萝らか妹 提交于 2020-03-07 02:07:30
先上一个图,大概说明一下moquette 的类之间的关系 一.ProtocolProcessor类 该类是moquette里面的最终要的类,负责所有报文的处理,持有所有各模块功能的实现对象的引用, 下面详细介绍 protected ConnectionDescriptorStore connectionDescriptors;//所有的连接描述符文存储,即clientId与通道之间的映射集合 protected ConcurrentMap<RunningSubscription, SubscriptionState> subscriptionInCourse;//所有当前正在处理的 订阅关系的存储,之所以有这个是过滤无效的订阅请求 private SubscriptionsDirectory subscriptions;//订阅目录,本质上是topic树 private ISubscriptionsStore subscriptionStore;//所有的订阅的集合 private boolean allowAnonymous;//是否允许匿名连接 private boolean allowZeroByteClientId;//是否允许clientId为空 private IAuthorizator m_authorizator; //对topic的读写权限认证 private

初识emqx消息服务器

本秂侑毒 提交于 2020-03-07 02:07:07
EMQ X R3.0 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的开源 MQTT 消息服务器。 MQTT是什么 MQTT是一个由IBM主导开发的物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性: 非常小的通信开销(最小的消息大小为 2 字节); 支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且易于使用的客户端; 支持发布 / 预定模型,简化应用程序的开发; 提供三种不同消息传递等级,让消息能按需到达目的地,适应在不稳定工作的网络传输需求。 emqx提供了三种消息发布服务质量 Quality of Service等级是发送与接收端的一种关于保证交付信息的协议。一共有3 个QoS 等级: (1) "至多一次0",消息发布完全依赖底层TCP/IP 网络,会发生消息丢失或者重复,这一级别可用于如下情况,环境,传感器数据,丢失一次度记录无所谓,因为不久之后会有第二次发送 (2)"至少一次1" 确保消息到达,但消息重复可能发生 (3) “只有一次2",确保消息到达一次,这一级别可用于如下情况,在计费系统中

mqtt协议-broker之moqutte源码研究四之PUBLISH报文处理

与世无争的帅哥 提交于 2020-03-07 02:03:39
先简单说明一下,对于mqtt是个双向通信的过程,也就是说,他既允许client向broker发布消息,同时也允许broker向client发布消息 public void processPublish(Channel channel, MqttPublishMessage msg) { final MqttQoS qos = msg.fixedHeader().qosLevel(); final String clientId = NettyUtils.clientID(channel); LOG.info("Processing PUBLISH message. CId={}, topic={}, messageId={}, qos={}", clientId, msg.variableHeader().topicName(), msg.variableHeader().packetId(), qos); switch (qos) { case AT_MOST_ONCE: this.qos0PublishHandler.receivedPublishQos0(channel, msg); break; case AT_LEAST_ONCE: this.qos1PublishHandler.receivedPublishQos1(channel, msg); break; case