说完了gen_server,今天我们来看看gen_event。
通常我们会有这么一种需求场景:采集客户端发送的事件,并做相应的处理,如下图:
EventServer负责接收客户端发送的事件消息,当它接受到一个事件消息后,
它回调所有的EventHandler处理这条信息(不同的EventHandler对同一条消息会才采取不同的响应),所以EventServer实际上是充当着
代理的角色,实际的事件消息是由EventHandler处理(我们称EventHandler是EventServer的callback模块)
现在我们按照上图,实现一下EventServer:
我们可以通过add_handler方法
动态的往EventServer中添加EventHandler(EventServer内部维护着一个HandlerList);
notify方法供客户端向EventServer发送事件消息,当EventServer收到一条事件消息时({event, Event}),它遍历HandlerList,把这条消息交给每个EventHandler处理;
接着,我们实现两个EventHandler(EventServer的callback模块),其中terminal_logger会把接受到的事件消息打印到控制台,file_logger会把事件消息记录到文件。
现在我们运行下程序,看下效果
event_server:start()启动了一个EventServer(初始状态下没有任何的EventHandler),接着我们动态的添加了两个EventHandler(3,4两行命令),最后我们使用event_server:notify方法向EventServer发送了两条事件消息,当EventServer收到这些消息后,回调所有的EventHandler进行处理,其中terminal_logger将收到的事件打印到了屏幕(如红色箭头部分),file_logger将事件保存到了event.log中
至此我们就实现了一个EventServer,那么gen_event是什么呢?它实际上就是我们刚才EventServer的一种实现并且提供更多更稳健的功能(譬如,不仅支持EventHandler的动态添加,也支持动态卸载),下面我们就用gen_event重新实现以下刚才的需求:
执行下程序:
第四行,我们向event_server发送一条事件消息,这时候屏幕上,文件里都记录了hello world这条事件消息,当我们调用gen_event:delete_handler方法去掉new_terminal_logger后,再次发送事件消息,这时候只有文件中会记录,屏幕上不再显示
关于gen_event我们就说道这里,更多api细节,请看:
http://www.erlang.org/doc/man/gen_event.html
- 大小: 35.5 KB
- 大小: 30.8 KB
- 大小: 7.4 KB
- 大小: 8.7 KB
- 大小: 12.3 KB
- 大小: 3.4 KB
- 大小: 20 KB
- 大小: 22.3 KB
- 大小: 13.3 KB
- 大小: 3.7 KB
分享到:
相关推荐
erlang_otp_win64_25.0
otp_win64_24.1.7.exe
是erlang_otp_20.3 的win64安装包,内为exe文件,一路next即可安装完成 是适用于多线程、分布式开发的语言,也是如rabbitmq等重要工具的必须品 使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang...
Erlang opt_win64 20.2 windows exe 安装包 Erlang 20.2 is the upcoming version of Erlang For Windows x64 installer 截至2018.01.25 groovy最新最稳定版本
Erlang是一种通用的面向并发的编程语言,它有瑞典电信设备制造商爱立信所辖的CS-Lab开发, 目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
Erlang otp_src_20.3.tar.gz linux centos otp-OTP-20.0.tar.gz 可兼容rabbitmq3.7.0
Erlang otp_win64_21.2.exe是目前Erlang otp win64位的最新版本。
erlang OTP Design Principles之Gen中文erlang OTP Design Principles之Gen中文
otp_win64_22.1的官方地址下载太慢,共享一下otp_Erlang_win64_22.1百度云下载地址
Erlang最新版本 25.0.3 windows 安装文件 解压直接安装 5个币-----------------------------------------------------------------------------------------------------------------------------------------------...
Erlang 20.1 is the upcoming version of Erlang For doc 截至2017.11.09 groovy最新最稳定版本 MD5: 7840521e80dbb394852f265ef3e04744 大小:31.5 MB
Erlang otp_win64_20.1.exe是当前最新版本的,更新时间2017-10-26
Erlang otp_win64_22.0.exe
本资源是 适用于 linux centos 的 最新版 otp_src_21.3.tar.gz
erlang 22.3版本 erlang_otp_src_22.3 安装说明https://blog.csdn.net/tangcv/article/details/111841082
rabbitmq安装前的环境安装,Erlang23.0 Windows64安装包,官网下载了几个小时
erlang otp25 win安装包
erlang_otp_20.3_man开发手册,erlang_otp_20.3_man开发手册,erlang_otp_20.3_man开发手册
erlang_otp_win64_20.2 分享! 官网实在太慢.... 存着也方便自己用
安装rabbitMQ所需要的基于erlang语言支持的OTP软件,64位和32位都有