新年10个Flag实现中~
访问量
559.0K
文章数
123
运行天
716
前言基于EMQ2.3.11。Mnesia是分布式电信数据库管理系统,有以下特性:DBMS查询语言数据持久性:表是持久化到存储的集群复制:表可以在多个节点上复制原子事务:支持事务透明:对编程来说是透明的实时数据搜索:查询速度很快一、Mnesia表的创建参数1、type表类型【取值】set:唯一键值,1:1,一个键一条记录ordered_set:唯一键值,1:1,带排序bag:1:n,一个键可以映射很多条记录2、record_name记录名称【取值】记录名所有表中的记录都必须是同一个记录的实例3、ram_copies内存复制【取值】节点列表可以指定要备份到哪些节点的内存中去,不保证事务更新。可以定时刷盘。4、disc_copies磁盘复制【取值】节点列表  指定要备份到哪些节
前言有时候看不懂代码,可以直接去debug一些模块,写一些单元测试。虽然Erlang提供了专门的单元测试方法,但由于没有整体配置(暂时不想二次开发),有一些模块无法启动,所以干脆只把需要的代码拷贝出来做debug观察数据,从而理解原理。整个分析基于EMQ2.3.11。一、调试方法1、准备好一个空Erlang工程参考《EMQ源码分析(一):在Windows上用IDEA搭建Erlang编译平台》,构建一个Helloworld就好。2、拷贝代码将需要测试的部分代码从EMQ里面拷贝出来,例如我想要了解订阅树如何构建的,就需要了解Topic如何被切分成三元组的,三元组具体的数据又是怎样的,把emqttd_trie、emqttd_topic相关代码拷贝出来:-module(hello).-author(
前言只需要了解EMQ用到过的语法,以EMQ2.3.11为基础,有任何理解错误请指正。一、认识HelloWorld%helloworldprogram-module(helloworld).-export([start/0]).start()->io:fwrite("Hello,world!\n").%:注释-module(模块名):定义模块,模块名必须和文件名一致(去掉后缀.erl),否则编译会出错。-export([函数名/参数个数]):定义外部可以调用的函数,斜杠后面是参数个数start():一个函数,名字任意取io:fwrite:调用io模块的fwrite函数,输出消息到控制台.:语句结束符二、数据类型1、标准数据类型Erlang有7种标准数据类型,数字、原子、布尔、位字符串、元
前言虽然目前遇到的所有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下载链接:如
一、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)支持多种
1