物联网之mqtt协议和emq开源项目
我的mqtt协议和emqttd开源项目个人理解
利白
这个作者很懒,什么都没留下…
展开
-
我的mqtt协议和emqttd开源项目个人理解(26) - 产品开发遇到的问题解答,关于订阅和上下线插件
我 17:27请问大咖们,之前群里提到“EMQ中CPU是公平分配给MQTT会话,大量pub消息到一个订阅,订阅不会拿到更多cpu,最终导致消息累积。”这个问题在emq v1和v2版本都存在吗?大概每秒发多少条数据就会出现这个现象?大梁先生 17:53这和机器配置有一定关系的 而且不要做这种设计呀 干嘛都投给一个topic我 17:59那应该怎么设计?因为我们的场景就是单一的行业...原创 2018-11-02 16:51:46 · 1337 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(25) - 协议里面Clean Session为0和1的区别
一、基本概念Session 会话定义定义:某个客户端(由ClientID作为标识)和某个服务器之间的逻辑层面的通信生命周期(存在时间):会话 >= 网络连接CleanSession 标记在Connect时,由客户端设置 0 —— 开启会话重用机制。网络断开重连后,恢复之前的Session信息。需要客户端和服务器有相关Session持久化机制。1 —— 关闭会话重用机制。...原创 2018-10-13 18:16:27 · 14592 阅读 · 1 评论 -
EMQ进程树/MQTT连接/订阅/发布源码流程分析【转载】
https://blog.csdn.net/hui6075/article/details/79495556写在前面EMQ作为一款优秀的开源MQTT broker,从一些库的使用以及框架的设计,可以看出作者也是非常精通Erlang的大牛!比如说对于集群化,作者自己实现了Ekka库,对于网络并发,作者自己实现了esockd。首先不论这些库性能如何,但敢于自己造轮子,会造轮子,绝对是对Er...转载 2018-09-27 10:26:01 · 1810 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(24) - emq v2.3.11源码成熟度如何?
源码:https://github.com/emqx/emqx-rel/tree/v2.3.11https://github.com/emqx/emqx/tree/v2.3.11/src从原作者那边了解到,总体还可以,但是做不到99.99%稳定。主要是连接内存占用没有保护。pubsub均衡时很稳定,但是集群或大量消息向少量订阅发布时会崩溃,小概率情况。EMQ中CPU是公平分配给MQ...原创 2018-09-21 10:06:04 · 1356 阅读 · 4 评论 -
看完让你彻底搞懂Websocket原理
http://www.blue-zero.com/WebSocket/ -- 在线测试偶然在知乎(https://www.zhihu.com/question/20215561)上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,...转载 2018-09-19 16:50:03 · 12218 阅读 · 1 评论 -
我的mqtt协议和emqttd开源项目个人理解(23) - websocket客户端连接过程分析(Wireshark抓包+源码分析)
我们可以使用emq自带的Dashboard插件,进行websocket调试,打开谷歌浏览器输入网址,其中192.168.83.128是emq所在的IP地址:http://192.168.83.128:18083/#/websocket用户名:admin,密码:publicWebSocket URI:ws(s)://192.168.83.128:8083/mqttTCP URI:tc...原创 2018-09-18 16:28:31 · 2003 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(22) - 关于客户端上线自动订阅主题
通过修改配置文件即可实现。 emq v1.1.3,rel\emqttd\etc\emqttd.config‘subscription’扩展模块支持客户端上线时,自动订阅或恢复订阅某些主题(Topic):%% Modules {modules, [ %% Client presence management module. %% Publis...原创 2018-09-18 16:23:14 · 1317 阅读 · 0 评论 -
使用 WebSocket 客户端连接 MQTT 服务器
https://www.jianshu.com/p/4fd95cae1a9chttps://github.com/mqttjs/MQTT.js/tree/master/examples firecat注:我们可以使用emq自带的Dashboard插件,进行websocket调试,打开谷歌浏览器输入网址,其中192.168.83.128是emq所在的IP地址:http://192...转载 2018-09-18 11:10:14 · 6791 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(21) - 关于emq的payload的使用和加密
问:payload传输过程中会不会拆包,粘包?业务层拿到payload还需要自己组包吗?答:不需要,mqtt协议有约定,emq会帮忙处理tcp的粘包拆包。总之,直接拿出来用即可。 问:payload怎么加密?答:安全,如果考虑商业用途的话,建议TLS+业务加密,双重加密。TLS私钥如果没有被暴露的话,基本无解。双重加密比较重要,因为如果是端,像Android和iOS其实是可以绕...原创 2018-09-13 17:54:04 · 1531 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(20) - 如果客户端clientid为空,emq会随机帮忙生成
mqtt v3.1.1协议有规定clientid可以为空,所以当客户端clientid为空,emq会随机帮忙生成。 一、源码emq 1.1.3 -- emqttd_protocol.erl客户端经过TCP三次握手建立连接之后,会发起mqtt connect packet,服务器接收到后开始处理这个数据包,入口函数就是如下的源文件,process函数:https://github.c...原创 2018-09-13 09:53:35 · 5344 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(19) - emq软件版本升级之后,因插件版本不对而引发的问题
本人把emq2.3.7版本写的插件copy到新版本emq2.3.11之后,编译可以通过,但是运行报错。经过反复调试发现,是版本号有区别造成:/home/emqx-rel-2.3.?/deps/emq_auth_clientid/Makefileemq v2.3.7PROJECT = emq_auth_clientidPROJECT_DESCRIPTION = Authenticat...原创 2018-09-12 15:07:32 · 840 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(18) - 一个客户端sub很多主题和数据,出现宕机?使用本地共享订阅解决!
EMQ中CPU是公平分配给MQTT会话,大量pub消息到一个订阅,订阅不会拿到更多cpu,最终导致消息累积,内存溢出宕机。最好的解决办法是分组订阅,把消息打散,多个客户端订阅。问:请问一下,我现在的业务就是只使用一个sub,主题是\hello\#,去订阅数万个终端消息。请问针对这个问题,如何来优化业务逻辑?可以通过增加sub的方式吗?即把数万终端分成几个小组,每小组往一个主题p...原创 2018-08-13 17:12:06 · 3914 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(17) - [error] Dependency luerl is specified as a dependency but is not...
编译源码出错:===> No entry for profile default in config. ===> Verifying dependencies... ===> Compiling jwerl make[2]: Leaving directory `/home/emq2.3.10/deps/jwerl' make[1]: Leaving directo...原创 2018-07-17 17:26:18 · 1425 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(16) - [error] Autocluster exception: {badmatch,undefined}
emq2.3.X会出现这个错误,怎么破?出现这个错误,emq程序无法正常启动,1883端口没有在监听。 emqttd broker is starting...[ok]emqttd alarm is starting...[ok]emqttd mod supervisor is starting...[ok]emqttd bridge supervisor is startin...原创 2018-05-31 15:08:31 · 1107 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(15) - MQTT消息推送协议应用数据包超时是否需要重发?
https://blog.csdn.net/libaineu2004/article/details/80493902 今天在看MQTT协议文档,到处关于QoS(Quality of Service)的介绍,文档说如果没有收到对方的PUBREL等确认包,超时后server需要'delivery retry", 一开始觉得理所当然的,重发嘛,丢包,正常。然后就看到消息重发(Mess...原创 2018-05-30 11:13:51 · 1175 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(14) - 使用redis插件来实现访问控制
一、工作环境准备准备好redis server,http://blog.csdn.net/libaineu2004/article/details/76267836erlang redis客户端使用开源项目,https://github.com/wooga/erediserlang连接池,https://github.com/emqtt/ecpoolemq使用的是v2.3.5版本,https://...原创 2018-03-16 09:40:28 · 2347 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(13) - Hook使用和连接Kafka发送消息,使用brod库
一、工作环境准备erlang kafka客户端库使用的是brod,https://github.com/klarna/brodemq使用的是v2.3.5版本,https://github.com/emqtt/emq-relxkafka的运行环境准备,http://blog.csdn.net/libaineu2004/article/details/79202408我们以插件的形式来实现,我的插件路...原创 2018-03-13 16:30:37 · 3182 阅读 · 15 评论 -
我的mqtt协议和emqttd开源项目个人理解(12) - Hook使用和连接Kafka发送消息,使用ekaf库
一、工作环境准备erlang kafka客户端库使用的是https://github.com/helpshift/ekafemq使用的是v2.3.5版本,https://github.com/emqtt/emq-relxkafka的运行环境准备,http://blog.csdn.net/libaineu2004/article/details/79202408我们以插件的形式来实现,我的插件路径是...原创 2018-03-01 16:53:58 · 3474 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(11) - EMQ 一个客户链接的资源消耗
本文参考了https://www.ttalk.im/topics/63?from=singlemessageErlang进程消耗EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略。 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先会建立一个负责管理连接的进程(emqtt_client),当验证客户端有效后会建立另一个...原创 2018-01-22 09:55:36 · 6162 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(10) - 建立高可用集群,负载均衡haproxy
方案1:Nginx+Keepalived+emq+MySQL双机热备,MySQL用于数据持久化方案2(推荐):HAProxy+Keepalived+emq+MySQL双机热备方案3:HAProxy+confd+emq+etcd问:我还有一个疑问,使用了nginx或者haproxy真的能提升性能吗?那nginx或haproxy本身服务器岂不是压力山大,所有数据都要经过它转发。答:它不...原创 2018-01-15 11:40:41 · 6639 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(9) - 集群和Mnesia源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113原创 2017-12-16 10:49:57 · 2084 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(8) - 客户端subscribe消息的源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113源码写得比较绕,需要经过以下模块的调用,入口是emqttd_client模块,handle_info函数负责接收socket的数据:1、-module(emqttd_client)原创 2017-12-16 10:48:01 · 2565 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(7) - Qos==2是如何保证消息只收到一次的
先来看图: Qos0消息发布订阅Qos1消息发布订阅Qos2消息发布订阅 只有QoS==1,2时候,才有Store(Msg)之说;QoS==0时没有。我们以第一种action为例(注意这里第一种action存储的是message,第二种action存储的是message ID):1 若client没收到来自sever的pubcomp:那么clie...原创 2017-12-15 15:53:31 · 9389 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(6) - 使用Wireshark分析mqtt协议
MQTT V3.1.1协议报文 报文结构固定报头(Fixed header) 可变报头(Variable header) 报文有效载荷(Payload) 固定报头Bit 7 6 5 4 3 2 1 0 byte1 MQTT Packet type Flags byte2… Remaining...原创 2017-12-11 16:02:22 · 11116 阅读 · 4 评论 -
我的mqtt协议和emqttd开源项目个人理解(5) - hook的使用,源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113原创 2017-12-07 17:49:20 · 1763 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(4) - 客户端CleanSession=0时,上线接收离线消息,源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/11131、-module(emqttd_client).[html] view plain copyhandle_info({inet_asy原创 2017-12-07 16:38:27 · 3388 阅读 · 1 评论 -
我的mqtt协议和emqttd开源项目个人理解(3) - 客户端publish消息QoS==0的源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113源码写得比较绕,需要经过以下模块的调用,入口是emqttd_client模块,handle_info函数负责接收socket的数据:1、-module(emqttd_client)原创 2017-12-07 16:07:43 · 2167 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(2) - 订阅$SYS主题,捕获客户端上下线消息
1、acl.config文件定义了可订阅$SYS主题的权限{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.%%%{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.{allow原创 2017-12-07 14:41:16 · 5601 阅读 · 6 评论 -
我的mqtt协议和emqttd开源项目个人理解(1) - Clean Session和Retained Message
学习mqtt协议和emqttd开源项目一、关于clean session的说明ets:mqtt_persistent_sessionets:subscribedets:subscriberMnesia:sessionMnesia:subscriptionMnesia:topic当clean session的值为false,即保留会话,那么该客户端上线,并订阅了主题原创 2017-11-29 17:21:14 · 13080 阅读 · 7 评论 -
erlang物联网开源项目emqtt下载,源码编译,调试工具和图形化监控相关
erlang官方文档,http://erlang.org/doc/man/emq官网:http://www.emqtt.com/https://www.emqx.io/emq简书:https://www.jianshu.com/u/9cbcdf094d33mqtt调试工具1(不支持websocket):mqtt.fxhttp://mqttfx.jensd.de/index.ph...原创 2017-10-19 17:24:44 · 3811 阅读 · 1 评论