Erlang
利白
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
erlang如何获取本机MAC地址?
使用命令inet:getifaddrs().详情见:http://erlang.org/doc/man/inet.htmlgetifaddrs() -> {ok, Iflist} | {error, posix()}TypesIflist = [{Ifname, [Ifopt]}]Ifname = string()Ifopt = {flags, [Flag]} | ...原创 2018-07-11 16:23:54 · 1049 阅读 · 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 · 2829 阅读 · 0 评论 -
erlang高性能网络库esockd的编译和使用(五)-热更新
讲解一下,如何实现rebar热更新程序。原创 2017-11-13 10:21:49 · 1124 阅读 · 0 评论 -
我的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 · 3706 阅读 · 1 评论 -
我的mqtt协议和emqttd开源项目个人理解(5) - hook的使用,源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113原创 2017-12-07 17:49:20 · 2031 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(9) - 集群和Mnesia源码分析
学习mqtt协议和emqttd开源项目http://emqtt.com/emqttd源码版本号是v1.1.3。http://emqtt.com/downloads/1113原创 2017-12-16 10:49:57 · 2376 阅读 · 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 · 6469 阅读 · 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 · 7133 阅读 · 0 评论 -
我的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 · 11645 阅读 · 4 评论 -
我的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 · 3764 阅读 · 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 · 2696 阅读 · 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 · 3514 阅读 · 15 评论 -
erlang mnesia 数据库实现SQL查询
Mnesia是一个分布式数据库管理系统,适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,越来越受关注和使用,但是目前Mnesia资料却不多,很多都只有官方的用户指南。下面的内容将着重说明 Mnesia 数据库如何实现SQL查询,实现select / insert / update / where / order by / join / limit / delete等SQL操作。示...转载 2018-05-22 15:46:51 · 872 阅读 · 0 评论 -
erlang实现字符串某个字符替换
replvar(S, _Var, undefined) -> S;replvar(S, Var, Val) -> re:replace(S, Var, Val, [global, {return, list}]).start(Type) -> Topic = replvar(Type, "_", "-"), io:format("topic is a: ~...原创 2018-05-24 09:06:24 · 2596 阅读 · 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 · 1437 阅读 · 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 · 1354 阅读 · 0 评论 -
我的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 · 2443 阅读 · 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 · 1676 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(18) - 一个客户端sub很多主题和数据,出现宕机?使用本地共享订阅解决!
EMQ中CPU是公平分配给MQTT会话,大量pub消息到一个订阅,订阅不会拿到更多cpu,最终导致消息累积,内存溢出宕机。最好的解决办法是分组订阅,把消息打散,多个客户端订阅。问:请问一下,我现在的业务就是只使用一个sub,主题是\hello\#,去订阅数万个终端消息。请问针对这个问题,如何来优化业务逻辑?可以通过增加sub的方式吗?即把数万终端分成几个小组,每小组往一个主题p...原创 2018-08-13 17:12:06 · 4419 阅读 · 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 · 1124 阅读 · 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 · 7510 阅读 · 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 · 5829 阅读 · 0 评论 -
我的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 · 1591 阅读 · 0 评论 -
我的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 · 2360 阅读 · 2 评论 -
我的mqtt协议和emqttd开源项目个人理解(21) - 关于emq的payload的使用和加密
问:payload传输过程中会不会拆包,粘包?业务层拿到payload还需要自己组包吗?答:不需要,mqtt协议有约定,emq会帮忙处理tcp的粘包拆包。总之,直接拿出来用即可。 问:payload怎么加密?答:安全,如果考虑商业用途的话,建议TLS+业务加密,双重加密。TLS私钥如果没有被暴露的话,基本无解。双重加密比较重要,因为如果是端,像Android和iOS其实是可以绕...原创 2018-09-13 17:54:04 · 1795 阅读 · 0 评论 -
看完让你彻底搞懂Websocket原理
http://www.blue-zero.com/WebSocket/ -- 在线测试偶然在知乎(https://www.zhihu.com/question/20215561)上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,...转载 2018-09-19 16:50:03 · 13827 阅读 · 1 评论 -
erlang:list_to_binary
list_to_binary:字符串转二进制 例子 结果 atom_to_list(hello). "hello" list_to_atom("hello"). hello binary_to_list(<<"hello">>). ...原创 2018-09-14 17:13:35 · 1949 阅读 · 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 · 1630 阅读 · 4 评论 -
EMQ进程树/MQTT连接/订阅/发布源码流程分析【转载】
https://blog.csdn.net/hui6075/article/details/79495556写在前面EMQ作为一款优秀的开源MQTT broker,从一些库的使用以及框架的设计,可以看出作者也是非常精通Erlang的大牛!比如说对于集群化,作者自己实现了Ekka库,对于网络并发,作者自己实现了esockd。首先不论这些库性能如何,但敢于自己造轮子,会造轮子,绝对是对Er...转载 2018-09-27 10:26:01 · 2060 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(25) - 协议里面Clean Session为0和1的区别
一、基本概念Session 会话定义定义:某个客户端(由ClientID作为标识)和某个服务器之间的逻辑层面的通信生命周期(存在时间):会话 >= 网络连接CleanSession 标记在Connect时,由客户端设置 0 —— 开启会话重用机制。网络断开重连后,恢复之前的Session信息。需要客户端和服务器有相关Session持久化机制。1 —— 关闭会话重用机制。...原创 2018-10-13 18:16:27 · 15197 阅读 · 1 评论 -
Mnesia迭代:提供一组函数来迭代表里的所有记录,firecat实践
1、Mnesia提供了如下几个函数遍历所有记录 mnesia:foldl(Fun, Acc0, Tab) -> NewAcc | transaction abort mnesia:foldr(Fun, Acc0, Tab) -> NewAcc | transaction abort mnesia:foldl(Fun, Acc0, Tab, LockTyp...原创 2018-09-28 17:32:15 · 627 阅读 · 0 评论 -
我的mqtt协议和emqttd开源项目个人理解(26) - 产品开发遇到的问题解答,关于订阅和上下线插件
我 17:27请问大咖们,之前群里提到“EMQ中CPU是公平分配给MQTT会话,大量pub消息到一个订阅,订阅不会拿到更多cpu,最终导致消息累积。”这个问题在emq v1和v2版本都存在吗?大概每秒发多少条数据就会出现这个现象?大梁先生 17:53这和机器配置有一定关系的 而且不要做这种设计呀 干嘛都投给一个topic我 17:59那应该怎么设计?因为我们的场景就是单一的行业...原创 2018-11-02 16:51:46 · 1575 阅读 · 0 评论 -
erlang高性能网络库esockd的编译和使用(一)
esockd网络库的来源是:https://github.com/emqtt/esockd,这里使用的是V4.2版本。从https://github.com/rebar/rebar/wiki/rebar下载已经编译好的执行文件rebar,Linux环境使用。然后放入工程路径,最终工程文件夹情况如图所示:其中的deps,doc,ebin文件夹都是后续生成的,rel文件夹是手动创建的。原创 2017-10-30 15:37:57 · 2099 阅读 · 0 评论 -
erlang游戏服务器
作者:庆亮链接:https://www.zhihu.com/question/20405300/answer/45747560来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。作为算是第一批Erlang应用于webgame(说是始作俑者也不为过)的家伙,补充点当年的实际决策情况,顺便纠正几个错误的认识,也算是自黑了不少:PS:1. 以下内转载 2017-09-14 15:39:37 · 6988 阅读 · 1 评论 -
erlang的消息队列
http://wudixiaotie.iteye.com/blog/2234159erlang的消息队列做的很牛逼,erlang的每个进程都有个消息队列,当一个进程接收到消息后,就会存储在该进程的消息队列中,然后如果进程当前执行的代码有receive Partten,则会对当前消息队列中的消息进行匹配,如果匹配成功则这条消息就从消息队列中拿走了,如果该进程继续进行接收,那么会重新对整个转载 2017-09-15 09:11:00 · 1248 阅读 · 0 评论 -
消息队列选型[首选Kafka](备选:RabbitMQ/NSQ/RocketMQ/disque/Kafka)
第一梯队: KafKa ~ Disque ~ NSQ第二梯队: RocketMQ ~ RabbitMQ第三梯队:消息队列选型Sep 27, 2015什么是消息队列顾名思义,消息队列就是用存放消息的队列结构,简称MQ。那什么是消息呢?广义上来说,所有的网络通信都可以看做是消转载 2017-09-15 09:28:29 · 1394 阅读 · 0 评论 -
用Erlang开发的九大开源项目汇总及介绍
http://blog.sina.com.cn/s/blog_96b8a154010136f9.html一、CouchDB 项目http://incubator.apache.org/couchdb/CouchDB是一个"面向文档"的数据库,采用 ErLang 语言开发,文档的格式是一个JSON字符串(也可包含二进制附件)。 底层结构是由一个"存储"(storeage)转载 2017-09-15 15:17:59 · 5567 阅读 · 0 评论 -
eclipse中安装erlang插件erlide
http://blog.csdn.net/zcyzsy/article/details/53185450eclipse中安装erlang插件erlide1. 手动下载erlide 然后解压到eclipse目录下对应的目录中。(但网上好找得资源都是低版本,最高到支持erlang R16B)放置如下所示的目录: 2. 追求支持高版转载 2017-09-06 22:19:37 · 2252 阅读 · 0 评论 -
erlang shell 命令中文使用说明
http://blog.csdn.net/mycwq/article/details/16858805erlang shell 是在命令行模式下使用命令和 erlang 交互的工具。erlang shell功能十分强大,可以直接编译、加载、执行、调试模块等等,完全可以将shell做为erlang项目的终端使用。文章将对erlang shell 命令做介绍,还简单以示例说明。转载 2017-10-07 11:55:32 · 666 阅读 · 0 评论 -
一种以standalone方式启动erlang应用的方法(守护进程)
http://cryolite.iteye.com/blog/383927erlang默认运行时是带有终端的,在开发过程中可以很方便的检查程序的bug,但在开发完成后,应该以后台的方式运行服务。-noshell (该参数关闭终端,但依然不会后台运行,有输出时会直接打印到当前屏幕-noinput 禁止终端下的输入-hidden 隐藏运行-detach转载 2017-10-07 12:59:58 · 1162 阅读 · 0 评论
分享