![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
erlang
lkness
学不见其长,但日有所增
展开
-
ubuntu16+ideaIC+rebar3搭建erlang开发环境
一、ubuntu16系统 二、安装各种库 sudo apt-get install build-essential sudo apt-get install libncurses5-dev sudo apt-get install libssl-dev sudo apt-get install m4 sudo apt-get install uni原创 2017-03-08 19:12:33 · 1035 阅读 · 0 评论 -
【从零开始构建erlang服务器】-02构建应用
【从零开始构建erlang服务器】-03构建应用一、简介开始一个erlang服务器应用的构建。项目管理工具使用rebar3。配置方式参考:ubuntu16+ideaIC+rebar3搭建erlang开发环境二、新建应用服务器应用名:erlserver,终端执行:rebar3 new app erlserver===> Writing erlserver/src/erlserver_app...原创 2018-04-05 18:04:26 · 623 阅读 · 0 评论 -
【从零开始构建erlang服务器】-01网络库
一、简介 网络库是服务器的基础。有了网络库,服务器就能接收外界消息,提供服务。因此开始就从网络库入手。这里先构建基础的TCP通信网络库。至于UDP、WebSocket这些通信手段暂不说。二、gen_tcp erlang的底层是c语言封装的,因此其socket通信在beam层也是经过封装的,更易使用。告别跟系统绑定的select/poll/epoll/iocp/kqueue的...原创 2018-04-05 14:24:01 · 1276 阅读 · 2 评论 -
【从零开始构建erlang服务器】-03用户层和日志
一、简介 上一篇讲了创建服务器项目以及添加ranch网络库,本篇利用网络库创建client socket消息处理的用户层代码以及服务器开发调试运维的日志集成。二、编写用户层代码 前面知道网络层处理客户端连接,以及可以将客户端socket文件描述符授权给其它worker进程来一对一为客户端服务(得益于erlang actor模型的轻进程,可以做到一个连接一个进程),而网络库我们使用的ranch,因此...原创 2018-04-11 21:46:00 · 368 阅读 · 0 评论 -
【从零开始构建erlang服务器】-04协议层
一、简介协议的作用很重要,通信协议可以理解为两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常 见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用...原创 2018-04-16 21:10:08 · 723 阅读 · 0 评论 -
Erlang词法分析器、语法分析器(lexer-leex,yac-yecc)
一、简介一门编程语言的编译器或者解释器通常功能分解为两步: 1、读取源码文件然后分析它的结构 2、处理这些结构,例如生成目标程序lexer和yacc就是能完成第一步以便生成程序段的工具。而第一步的任务又能分为两个子任务: 1、分割源码文件内容为很多tokens(lexer) 2、分析出程序的分级结构(yacc)二、lexer(词法分析工具) lexer的源就是一个正则表达式表,其正则规则符合目标程...原创 2018-04-15 22:24:33 · 1757 阅读 · 0 评论 -
erlang底层c定时器设计-Erlang源码学习二
Erlang底层的定时器实现位于源码的erts/emulator/beam/time.c文件,用时间轮的方式动态添加和删除定时器,结构体名为typedef struct ErtsTimerWheel_ ErtsTimerWheel,每一个定时器的结构体名为typedef struct erl_timer ErtsTWheelTimer,看结构体实现大体上可以知道定时器的设计。定时器 ErtsTWh原创 2017-05-29 22:54:15 · 1406 阅读 · 0 评论 -
erlang:now()与os:timestamp()-Erlang源码学习一
erlang中,关于erlang:now()与os:timestamp()两个接口,查看官方文档的解释: erlang:now/0 os:timestamp/0 按官方文档上说erlang:now/0是废弃了的,它可以获取一个持续递增的唯一时间戳。除此也没说讲到更多。再看erlang:now/0文档给的时间和时间修正,里面详细描述了erlang对于时间的处理,暂不看。直接跳到原创 2017-05-10 23:20:50 · 2824 阅读 · 1 评论 -
erlang的终端带颜色输出与中文字符串输出
一、带颜色输出 erlang终端支持带颜色输出,例如lager日志库就可以。其实就是在输出前设置一下输出属性,正常的字体是:”\e[0;38m” 下面自己弄了一些宏:-define(CONSOLE_COLOR_RED, "\e[0;31m").-define(CONSOLE_COLOR_RED_BOLD, "\e[1;31m").-define(CONSOLE_COLOR_YELL原创 2017-03-19 22:10:58 · 1307 阅读 · 0 评论 -
erlang编写rebar3插件
一、生成插件工程 假设插件名为testp,执行rebar3 new plugins testp,即生成了插件工程项目,查看目录结构如图: testp.erl文件调用初始化的代码,而插件最重要的代码在testp_prv.erl的文件,文件里提供了三个接口,分别为init/1,do/1,format_error/1,init做插件初始化的工作,初始化命名空间/初始化命令,然后将命令加入到原创 2017-03-08 20:06:40 · 1130 阅读 · 0 评论 -
erlang rebar3配置文件
rebar3的简单使用可以参考rebar3的官方文档。以下讲解一些rebar3的配置,初入erlang,理解还不甚深刻。 用rebar3进行工程创建,会生成rebar.config文件,贴一些配置的使用方法一、编译设置 %% 编译设置 {erl_opts, [ {parse_transform, lager_transform}原创 2017-03-08 19:37:34 · 5038 阅读 · 0 评论 -
Erlang Abstract Syntax Tree和汇编字节码
一、抽象语法树简介 抽象语法树(Abstract Syntax Tree)是源代码的抽象语法结构的树状表示。 抽象语法树是解析器(parser)的产物,解析器广义来说输入一般是程序的源码,输出一般是语法树(syntax tree,也叫parse tree等)或抽象语法树。进一步剥开来,广义的解析器里一般会有扫描器(scanner,也叫tokenizer或者lexical analyzer,词法分析...原创 2018-04-07 01:19:20 · 858 阅读 · 0 评论