`
DiaoCow
  • 浏览: 242744 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Erlang OTP学习(2):gen_event

阅读更多
说完了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
2
7
分享到:
评论

相关推荐

    erlang OTP Design Principles之Gen中文

    Erlang OTP设计原则中的Gen_Fsm行为是一个关键的概念,用于构建健壮、可扩展的并发应用程序。Gen_Fsm,即通用有限状态机,是一种行为模式,它提供了一种结构化的方法来处理具有多种状态和事件的系统。本文将深入探讨...

    erlang_otp_src_17.3.tar.gz

    7. **行为模块**:如gen_server、gen_event、gen_fsm等,是OTP设计模式的具体实现,简化了编写服务器、事件处理器和有限状态机的代码。 关于压缩包内的"otp_src_17.3",这是Erlang OTP 17.3版本的源代码目录。为了...

    Erlang OTP并发编程实战 附书源码

    2. **gen_server行为**:gen_server是Erlang OTP中最常用的行为模式,它提供了一个通用服务器模板,支持请求-响应模型。通过gen_server,你可以创建状态管理服务器,处理同步和异步调用,同时支持定时任务和错误处理...

    Erlang OTP设计原理文档 中文版本

    Erlang OTP(Open Telephony Platform)是Erlang编程语言的一个核心部分,它提供了一套强大的工具和库,用于构建可靠、可扩展和容错的分布式系统。OTP设计原则着重于实现高度并发、容错性和高效能。下面将详细讨论...

    ErlangOTP 21.3.zip

    OTP是Erlang生态系统的重要组成部分,提供了许多预先设计好的行为模式(如 gen_server、gen_event 和 supervisor),这些模式使得开发者能够快速构建出符合Erlang并发哲学的应用程序。 otp_src_21.3.tar是Erlang ...

    otp_src_22.0_h.tar.gz

    OTP提供了几个设计良好的应用框架,如gen_server、gen_event、gen_fsm等,它们是基于行为模式的模块,简化了并发编程和状态管理。 5. **分布式功能** OTP支持跨节点的分布式计算,使得在多台机器上构建分布式系统...

    otp_win64_23.1.exe|otp_win64_23.1.zip

    2. OTP框架:理解其模块化设计、行为(gen_server, gen_event等)、分布式应用和系统监控。 3. RabbitMQ基本概念:掌握消息队列的工作原理、交换器(exchanges)、队列(queues)、绑定(bindings)以及消费者...

    Erlang-OTP-API 离线查询英文全手册

    此“Erlang-OTP-API 离线查询英文全手册”是Erlang OTP的官方文档,包含了所有API的详细信息,是学习和开发Erlang OTP应用的重要资源。手册内容广泛,包括了以下几个核心部分: 1. **模块和函数**:手册详细列出了...

    otp_src_R11B-5.tar.gz_OTP_erlang_otp-src-R11B_otp_s

    这些库包括Mnesia(分布式数据库)、Event Logger、公共接口定义语言(CIDL)以及行为模式如GenServer、GenEvent和Gen_fsm等。这些行为模式为开发者提供了构建状态管理、事件处理和分布式服务的标准结构,使得代码...

    otp_src_21.1.tar.gz

    1. **模块化设计**:OTP提供了各种预定义的进程行为模式(gen_server、gen_event、gen_fsm等),便于开发者创建符合特定模式的进程,提高了代码复用和可维护性。 2. **分布式计算**:Erlang OTP支持跨节点的进程...

    Erlang入门:构建application练习5(监督树)

    2. **模块(`.erl`)**:实际实现功能的代码,可以是普通的函数模块,也可以是行为模块(如gen_server,gen_event等)。 3. **启动脚本(`.boot`)**:指定启动应用时的初始状态,包括启动哪些进程及其顺序。 4. *...

    Erlang/OTP 中文手册(R11B)

    **Erlang/OTP 中文手册(R11B)** ...通过深入学习这份手册,读者不仅可以掌握Erlang语言的基本语法,还能了解如何利用OTP构建健壮的分布式系统,为在高并发、高可用性场景下开发软件打下坚实基础。

    timekeeper:ErlangOTP的游戏时钟应用程序

    在Erlang OTP中,应用程序通常由几个部分组成,包括行为模块(如gen_server、gen_event等)、状态管理、错误处理和进程通信。Timekeeper应用可能包含以下组件: 1. **gen_server行为模块**:Timekeeper可能实现了一...

    erlang_standard_snippets-源码.rar

    8. **行为(Behaviours)**: Erlang的行为如gen_server、gen_event和gen_fsm,提供了标准的服务器、事件管理和有限状态机的实现框架。源码中可能会有这些行为的实例。 9. **并发与分布式(Concurrency and ...

    erlang9.rar

    OTP库提供了许多实用的模块,如gen_server、gen_event和gen_fsm,这些都是Erlang并发编程的基础。 总而言之,Erlang9.rar是一个包含Erlang/OTP 20.0 Windows 64位安装程序的压缩包,主要用于安装Erlang环境,以...

    Erlang编程语言

    7. **OTP(Open Telecom Platform)**:Erlang OTP是一套标准库和设计原则,提供了如gen_server、gen_event等行为模式,帮助开发者遵循良好的软件工程实践。 在《Erlang编程指南》这本书中,作者Francesco Cesarini...

    erlang r17官方api及stdlib手册

    11. **gen_event**: OTP行为,用于创建事件处理系统,支持事件监听和处理。 12. **net_adm**: 网络管理工具,如`ping/1`检查节点连接状态,`name/1`设置节点名。 13. **erlang**: 基础函数,如`length/1`获取列表...

    Erlang和RabbitMQ安装包

    5. **OTP(Open Telecom Platform)**:Erlang OTP是一套库和设计原则,提供了如行为模式(gen_server, gen_event等)、监控和分布式管理工具,简化了复杂系统的构建。 **RabbitMQ** RabbitMQ是基于AMQP(Advanced...

    erlang+android

    4. **通信协议**:如果Erlang部分负责后台服务,可能会涉及使用Erlang的OTP库(如gen_server、gen_event等)来实现可靠的服务模型,并通过HTTP、WebSocket或其他协议与Android前端通信。 5. **错误处理与容错**:...

    otp-OTP-19.3.zip

    3. **模块更新**:许多OTP库模块在19.3版本中得到了更新,例如`gen_server`、`gen_event`等行为模式,它们是构建Erlang应用程序的基础。这些更新通常涉及到性能提升、API调整或新功能的添加,以更好地适应不断发展的...

Global site tag (gtag.js) - Google Analytics