新年10个Flag实现中~
访问量
284.7K
文章数
110
运行天
529
前言基于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种标准数据类型,数字、原子、布尔、位字符串、元
前言这里对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下载链接:如
前言由于3月初七牛云的云存储的CDN回源流量开始收费,穷困的我准备放弃使用七牛云存储,只使用CDN(研究后发现七牛云的0.15/GB已经是业界很低的价格了,如果有条件还是可以支持的)。于是我在3月初重新配置了一次CDN,可这次配置导致了一个奇怪的现象,那就是无论我如何设置CDN,访问的cdn.bewindoweb.com的时候总是产生一个HTTP301永久跳转,跳转回了www.bewindoweb.com,再HTTP200下发数据:访问CDN就相当于只多了一层跳转,数据还是从网站服务器拿到的,完全没有CDN的作用……最近发现越来越卡,图片的流量挤爆了我的1M小水管,网站打开一直转圈圈,于是下定决心要弄好为止。一、查找表面原因百度了半天CDN跳转301回源站,出来的都是不相关的信息,所以我打算
前言一致性Hash是分布式架构最重要最基础的东西,这里以分布式图片缓存服务器为例进行讲述。原始问题:假设我们需要对一堆图片做缓存,缓存的图片放在了2台服务器上,当到来一个请求,应该如何知道请求的图片在哪台上面呢?暴力遍历就不要去想了,否则缓存就没有意义了。一个自然的想法就是根据图片的名字做一个映射(Hash),将图片名字映射到0,1两个数字上面,例如有这样的映射函数:f(图片名称)=md5(图片名称)%2md5是一个典型的哈希函数,会产生128bit的值,模2后只可能是0或1,那么我们就根据这个值把图片存入0、1两台服务器,当请求过来,根据图片名称计算出值,就可以知道图片缓存放在第几号服务器了:但假设现在我们图片太多了,需要再增加一台服务器分担压力,哈希函数必须更改成0、1、2映射,我们改为
一、.pkg文件格式.pkg是很多游戏的通用资源打包格式,在QQ的所有游戏都能够见到它的身影,像QQ三国、QQ堂之类。最近还在有小伙伴问我答题器是怎么做的。答题器就只是从数据库查找文本而已,数据就是从pkg文件里提取出来的。解析pkg文件需要知道它的原始格式,pkg文件格式如下:分为Header、Data、Meta三部分:Header:4字节固定标志,4字节文件数,4字节Meta位置偏移,4字节Meta长度Data:所有资源文件的压缩数据Meta:是一个列表,每个项包含文件名长度、文件名、固定识别标志、文件偏移、文件原始大小、文件压缩大小我们可以通过Meta偏移找到Meta列表开始的地方,遍历Meta列表,用文件偏移+文件压缩大小从Data区获取压缩数据,然后利用zlib进行解压就得到原始数
12345... 12下一页