新年10个Flag实现中~
访问量
618.9K
文章数
124
运行天
747
前言这里对Erlang概念的掌握只是能基本看懂EMQ写的是什么就可以了,不需要具备二次开发EMQ的能力,达到开发的熟练度还需要花费大量时间。一、Erlang基本了解1)首先要知道Erlang是用C语言写的,所以它的大部分语法都和C语言近似。2)Erlang发明的目的就是分布式、并发的,编程的时候用单机编程思路就好了,分布式是透明的,所以适合用来写分布式并发程序。3)Erlang的核心是进程,这里的进程是Erlang自己的概念,和Linux的系统进程是完全不同的,比C语言的线程切换快得多。4)Erlang的运行时环境是一个虚拟机,类似Java的一次编译随处运行。二、Erlang/OTP1、OTPOTP(OpenTelecomPlatform,开放电信平台)是一个开源的Erlang分发和一个用E
前言虽然目前遇到的所有Broker设计问题都似乎得到了解决,但还是希望能够借鉴更多优秀的代码设计思路。Java开源的Broker代码都有局限性,而免费开源的完整的速度快的MQTTBroker也就只有EMQ了,没有办法只能花时间研究Erlang和EMQ源码了。首先需要搭建Erlang的IDE,之前用IDEA来作为Lua的IDE,没想到IDEA还能作为Erlang的IDE,实在是太好用了。一、用IDEA搭建Erlang集成开发环境搭建流程已经放到了wiki:软件安装手册→ 《Erlang+Windows+IDEAIDE环境搭建》,这里重复地描述下重要步骤。1、去Erlang官网下载对应的Erlang程序官网地址:http://www.erlang.org/downloads下载链接:如
前言基于MqttWkv1.0.7。MqttWk没有构建内存中的订阅树,直接利用存储在Redis中的订阅信息来获取订阅者。订阅树算法分析主要的代码在cn.wizzer.iot.mqtt.server.store.subscribe.SubscribeStoreService:@OverridepublicList<SubscribeStore>search(Stringtopic){List<SubscribeStore>subscribeStores=newArrayList<SubscribeStore>();List<SubscribeStore>list=subscribeNotWildcardCache.all(topic);if(li
前言基于MqttWkv1.0.7。  一、BrokerHandlerchannelActive()@OverridepublicvoidchannelActive(ChannelHandlerContextctx)throwsException{super.channelActive(ctx);this.channelGroup.add(ctx.channel());this.channelIdMap.put(ctx.channel().id().asShortText(),ctx.channel().id());}当channel刚生效(客户端刚连接),将其channel信息存起来。Netty默认提供了channel管理,这里自己做channel管理是为了方便根据cha
前言基于MqttWkv1.0.7。BrokerServer是MqttWk从MainLaucher启动之后执行的第一个类。start()publicvoidstart()throwsException{LOGGER.info("Initializing{}MQTTBroker...","["+brokerProperties.getId()+"]");channelGroup=newDefaultChannelGroup(GlobalEventExecutor.INSTANCE);channelIdMap=newHashMap<>();bossGroup=brokerProperties.getUseEpoll()?newEpollEventLoopGroup():newNioEv
前言基于MqttWkv1.0.7。  MqttWk是我见过最清晰、代码量最少的Broker了,分析其源码有利于初步了解。一、代码结构分析1、整体架构mqtt-auth:验证权限方面的代码mqtt-broker:Broker核心代码mqtt-common:抽象出来的持久化接口mqtt-store:持久化接口的Redis、Kafka实现mqtt-zoo:简单测试代码2、mqtt-auth代码结构验证服务的实现,还有一些验证工具类3、mqtt-broker核心代码结构cluster:集群通信的实现,用的是Redis的发布订阅作消息总线codec:基于Websocket的MQTT通信需要特殊的编解码器,这里是为websocket写的编解码器config:Broker参数配置han
一、功能测试工具1、eclipse/paho.mqtt-spy【链接】github下载地址| mqtt-spy官方功能介绍  【简介】这是一个基于java做的GUI工具,需要jdk8+。界面一看就懂,建议连接的时候开启Details模式,这样功能会全一些:【功能介绍】1)连接、安全协议:mqtt3.1/3.1.1连接方式:IP+任意端口+TCP/Websocket+TLS(CA、TrustStore)1.1、1.2、1.3ClientID:可以帮助你自动生成随机IDCleanSession标志位连接超时、失败重连、失败重订阅、重连间隔KeepAlive设置Username、Password设置遗嘱设置:Topic、QoS、Retain、Data2)订阅和发布订阅
一、MQTTBroker的需求1、基本需求1)支持mqtt3.1/mqtt3.1.1协议(可选mqtt5.0)3.1和3.1.1是最常见的协议版本,几乎目前生产的IoT设备都支持,所以Broker也必须支持。至于5.0版本,目前各大Broker都在努力支持,不过还需要一些时间才会普及。2)支持QoS0、QoS1(可选QoS2)各大厂商都至少支持了QoS1,保证消息到达。一般的场景下不会用到QoS2,所以可以选择性地考虑支持QoS23)支持遗嘱消息这是必须支持的功能,通常设备断开都不是主动断开的,而是没有电了才断开,属于异常断开,需要设置遗嘱消息来通知后端服务或者其他设备进行后续处理。4)支持持久化一些数据如QoS1消息、持久Session,需要支持持久化,这是MQTT协议规定的。5)支持多种
上一页 123下一页