MQTT协议及其应用
文章平均质量分 68
MQTT协议是目前移动互联网行业应用非常广泛的协议,本人有多年MQTT的使用经验,并对该协议的开源软件mosquitto进行了重构,性能提升近5倍多,希望能通过该博客专栏结识更多对mqtt协议感兴趣的同学。
逍遥子_
重点关注大并发处理、分布式计算、微服务、物联网、大数据等领域
展开
-
基于mosquitto快速构建支撑海量设备的物联网接入平台
本文对应的论文已经发表,对应专利已经授权!转载及使用请与作者沟通。 该方案采用组件化(服务化)设计与开发,上、下行通道分离,各服务可自由组合、支持设备端根据业务场景进行多种方式上报数据,下行通道主要用于和终端设备之间保持长连接,让消息能够快速、必达设备端。 为什么要采用上下行分离的方式?最主要原因是上下行的使用场景不同,对传输通道的要求不同。一般下行用于下发控制指令,要求数据能及时送达终端,并且要保证消息不丢,因此下行系统需要与设备端保持长连接,它必须具备承载及处理大量连...原创 2021-10-25 15:00:40 · 2446 阅读 · 0 评论 -
mosquitto常见问题及其解决办法
问题一:问题描述:在centos7上编译mosquitto源码时,出现以下问题:make[1]: 进入目录“/home/jason/mosquitto-1.2/man”xsltproc mosquitto.8.xmlwarning: failed to load external entity "/usr/share/xml/docbook/stylesheet/docbook...原创 2015-07-01 16:24:11 · 47572 阅读 · 4 评论 -
MQTT协议简介
这里写自定义目录标题欢迎使![在这里插入图片描述](https://img-blog.csdnimg.cn/20210317104503572.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hqeF8xMDAw,size_16,color_FFFFFF,t_70)新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何原创 2021-03-17 10:45:56 · 914 阅读 · 0 评论 -
Mosquitto感知客户端上下线的方法
欢迎加入QQ群:221779856,国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。需要让设备上mqtt客户端配合来完成。1、怎么知道设备下线?异常断线(Mosquitto没有收到MQTT 的DISCONNECT报文)时,使用遗嘱机制,mqtt客户端在建立mqtt连接的时候,设置遗嘱(向什么topic发送什么数据...原创 2019-03-20 10:26:12 · 11734 阅读 · 0 评论 -
开启Mosquitto系统topic功能
mosquitto的系统topic主要是以$SYS开头的topic,这些topic只能mosquitto自己发送,客户端只能订阅,无法发送;mosquitto的系统topic主要用于mosquitto对外发布一些自身状态的消息,例如当前客户端连接数量等等,如下所示:当前mosquitto维持的客户端数量:$SYS/broker/clients/total当前mosquitto维护的活跃的客...原创 2019-02-20 11:32:36 · 5811 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(三)
**四、 推送系统的集群化**4.1长连接集群推送系统作为一项基础服务,它需要承载全部在线用户量,对于移动互联网行业,在设计之初的期望目标用户量就非常大,并且用户未来一段时间的增长量通常难以预估,因此要求在设计推送系统时,都要求能够集群化部署、支持动态扩展。那么长连接集群化设计时需要解决那些问题呢? 个人认为长连接服务需要解决三个问题:路由、管理和动态扩展;另外,如果想要锦上添花,让长连接通道更加原创 2016-11-24 19:43:51 · 3362 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(二)
**三、 消息推送的工作模式** 常见的消息推送系统的工作模式有:推模式、拉模式以及推拉混合模式三种,在很多推送系统中,采用在线消息直接推送下去,离线消息让客户端拉取,这种方式很容易造成漏消息的问题。本节将介绍几种“特殊定义“的推送模式的特点和应用场景,它们的含义与通常理解的略微有些差异。 在线用户:个人认为在线用户是指网络正常、弱网、网络异常等情况下的用户,这些用户实际上正在使用系统,只是由于原创 2016-11-24 19:40:05 · 10057 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(一)
消息与通知本文中的消息是指交给推送系统的待发送字符串;通知是指推送系统内部,通过长连接服务发送给客户端的通知字符串,它只在推送系统内部使用,对于使用推送系统的上层应用无法感知其存在;一、 安全性在推送系统中,安全性最受关注的是长连接的安全管控,以及数据在长连接通道上传输的安全性。举个针对长连接的安全管控的例子:有人知道你的长连接服务的IP地址和端口之后伪造大量的TCP连接,将会对长连接服务器端产生的原创 2016-11-24 19:11:03 · 5456 阅读 · 0 评论 -
Mosquitto安装及使用简介
1、源码下载:(1)官方源码下载:http://mosquitto.org/files/source/(2)性能优化版源码下载:https://github.com/houjixin/mosquitto-1.4.11-opt(3)性能优化版优化方案:https://blog.csdn.net/hjx_1000/column/info/mqtt2、编译解压下载的压缩包后会生...原创 2019-08-20 12:19:36 · 4714 阅读 · 0 评论 -
mosquitto的多端口机制及其使用
欢迎加入QQ群:221779856,国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。一、mosquitto多端口机制的说明mosquitto的多端口机制是指它能够同时监听多个端口,通过配置文件“mosquitto.conf”可以看到它默认的监听端口的配置参数是port,而其他扩展监听端口的配置使用参数:listener,并...原创 2018-11-26 14:02:47 · 13449 阅读 · 0 评论 -
Windows下openssl的下载安装和使用
安装openssl有两种方式,第一种直接下载安装包,装上就可运行;第二种可以自己下载源码,自己编译。下面对两种方式均进行详细描述。一、下载和安装openss方法一:直接使用openssl安装包Window 的openssl的安装包的下载地址为:http://slproweb.com/products/Win32OpenSSL.html一般在安装openssl之前还需要vs的一些原创 2014-05-14 15:57:22 · 140711 阅读 · 4 评论 -
java版mosquitto客户端使用SSL功能的具体操作总结
在开发java版mosquitto客户端程序时需要使用paho库,如果开发的java客户端要用ssl功能,则需要Bouncy Castle库;在使用ssl功能时,需要证书文件进行进行身份认证,但在测试过程中,只自己制作ca并进行证书签发即可。在测试过程中首先创建一个统一的ca,该ca包括一个crt文件,一个key文件(例如ca.crt、ca.key);测试过程中,要使用该ca为每个测试的机原创 2015-06-01 10:05:42 · 5170 阅读 · 2 评论 -
ip别名及其在tcp压力测试时候的作用
通常在对服务器程序进行压力测试时,需要客户端模拟大量的tcp连接,以对服务器端产生强大的压力,但是由于linux端口号的限制,每个客户端ip顶多能发起6.4w左右的连接,详情可参考:http://blog.csdn.net/houjixin/article/details/18737881或者:http://houjixin.blog.163.com/blog/static/35628410201...原创 2015-07-31 17:03:43 · 2190 阅读 · 1 评论 -
使用 logrotate对centos中各服务程序的日志文件进行转储
1.mosquitto的日志输出方式简介mosquitto是一个纯C的代码,它的日志输出支持若干中日志输出方式,通过修改配置项:log_dest即可完成对各种日志输出类型的切换,常见的日志输出类型有有下几种:(1)控制台输出stdout、stderrrlog_dest stderr(2)输出到日志文档log_dest file /home/logs/mosquitto/mosquitto.log【原创 2017-05-23 18:40:03 · 4286 阅读 · 0 评论 -
mosquitto鉴权插件的开发与说明(一)
1. mosquitto的插件的接口在文件mosquitto_plugin.h中进行了声明,在创建自己的鉴权插件代码中必须包含头文件mosquitto_plugin.h,并且实现该头文件中声明的所有鉴权接口函数(接口函数mosquitto_log_printf除外)。2. mosquitto插件的权限校验方式由头文件mosquitto_plugin.h中声明的接口函数所限制,共原创 2017-08-02 17:54:59 · 8305 阅读 · 2 评论 -
mosquitto支持websocket的使用方法
欢迎加入QQ群:221779856,国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。mosquito的版本要大于1.4.2;1.修改配置:打开configure.mk中的WITH_WEBSOCKETS配置项,如下:WITH_WEBSOCKETS:=yes2.编译make3.安装webs...原创 2018-04-02 14:59:39 · 21713 阅读 · 7 评论 -
Mosquito的优化——其他优化(九)
9.1、空闲空间管理机制优化Mosquito原始版本程序中,有新的连接进来时,需要扫描整个context,查找一个空闲的位置以存放新连接产生的context,如果找不到空闲位置,则使用realloc再扩充一个context的位置。这种操作方式有两点非常低效:1) 扫描context,每次有新连接进来的时候都要扫描context数组以查找一个空闲的context位置;2) 当前con原创 2015-06-08 16:03:26 · 4783 阅读 · 2 评论 -
Mosquito的优化——订阅树优化(八)
8.1 mosquitto的订阅树机制在mosquitto原始版本中,所有的订阅关系都是通过一颗订阅树来维护,在订阅树中,topic将被按照“/”组织成树状结构,如图5-3所示的订阅树,其中订阅树的每个节点都是一个topic分级,每个节点对应的topic就是从根节点到当前节点所组成的topic,每个节点旁边的星状列表即是该节点所对应的订阅列表。图8-1 订阅树在mosqu原创 2015-06-08 15:57:08 · 7758 阅读 · 6 评论 -
Mosquito的优化——epoll优化(七)
原版的mosquito在移动互联网情况下,其性能不高,实际运营时一个mosquito实例能支持2万连接就不错了;mosquitto在网络状态不好的情况下,随着用户量的上升,其对cpu消耗将大幅增加,主要的CPU主要消耗在以下几个方面:(1)Poll机制的缺陷;(2)Mosquitto内部订阅树机制的缺陷;(3)其他消息发送,数据结构管理方面的缺陷;本节将针对这些缺陷提出相应的优化策原创 2015-06-08 15:44:59 · 10400 阅读 · 12 评论 -
Mosquito使用SSL/TLS进行安全通信时的使用方法
1、 SSL简介SSL(SecureSocket Layer)安全套接层,是网景公司提出的用于保证Server与client之间安全通信的一种协议,该协议位于TCP/IP协议与各应用层协议之间,即SSL独立于各应用层协议,因此各应用层协议可以透明地调用SSL来保证自身传输的安全性,SSL与TCP/IP协议及其其他应用层协议之间的关系如图1所示。 图1 SSL/TLS协议与应用层原创 2014-04-22 13:55:14 · 32255 阅读 · 3 评论 -
mosquitto源码分析(六)
一、 Mosquito的辅助功能介绍Mosquitto代码的辅助功能主要包括:log输出功能、配置参数管理功能和内存封装的功能,这三个功能虽不是mosquitto的核心模块,但是却在其源码实现中经常遇到,它们的实现给mosquitto的代码开发带来了很大的方便。4.1、log输出功能Mosquitto日志输出功能的实现代码主要在文件/ mosquitto-1.2/src/loggin原创 2014-03-18 16:04:53 · 7977 阅读 · 4 评论 -
mosquitto源码分析(五)
3.2.1、poll机制简介Poll机制是一种I/O多路转接(I/O multiplexing)技术,这种技术先构造一个有关描述符的表,然后调用一个函数,知道这些描述符中的一个已准备就绪好进行I/O时,该函数才返回,该函数返回之后它告诉进程那些描述符已经准备好进行I/O)。其工作过程为:(1)首先构造一个pollfd结构数组,每个数组元素指定一个描述符编号以及对其所关心的状态。(2)为原创 2014-03-18 16:02:52 · 9208 阅读 · 5 评论 -
mosquitto源码分析(四)
3.1.2、使用订阅树发布消息在Mosquito程序中,消息发送过程主要通过遍历订阅树来完成,具体为:递归遍历订阅树找到指定的订阅列表,并将消息挂到订阅列表中的每个contextg的消息队列中,如果消息的retain字段被设置为1,则mosquitto还需要保存此消息,以备新订阅的客户端可以立即收到上次发送的消息;另外,发往系统topic的消息也会被mosquitto保存起来。上述消息发送过程原创 2014-03-18 15:52:28 · 9873 阅读 · 4 评论 -
mosquitto源码分析(二)
一、 Mosquito的数据结构1) struct mosquito结构体struct mosquito主要用于保存一个客户端连接的所有信息,例如用户名、密码、用户ID、向该客户端发送的消息等,其定义为:struct mosquitto { int sock; char*address; char *id; char*username; ch原创 2014-03-18 15:24:27 · 12110 阅读 · 3 评论 -
mosquitto源码分析(一)
本文由逍遥子撰写,转发请标注原址:http://blog.csdn.net/houjixin/article/details/21461225一、 Mosquitto简介mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,例如现在应用广泛的低功耗传感器,手原创 2014-03-18 15:22:26 · 25011 阅读 · 2 评论