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

gen_event

 
阅读更多

详细解释:参考文档http://erlangdisplay.iteye.com/blog/315391 上面代码好多错误


-module(recent_logger).
-behaviour(gen_event).

-export([start/0, stop/0, log/1, report/0, release/0]).

%% gen_event callbacks
-export([init/1, handle_event/2, handle_call/2, terminate/2,add_handler/0]).
-define(NAME, logger_manager).

add_handler()->
    gen_event:add_handler(?NAME, ?MODULE, [testinit]).

%% start behaviour
start() ->
    case gen_event:start_link({local, ?NAME}) of
        Ret = {ok, _Pid} ->
%            gen_event:add_handler(?NAME, ?MODULE, [testinit]),
            Ret;
        Other ->
            Other
    end.

%% stop
stop() ->
    gen_envent:stop(?NAME).

%% notify an envent about log
log(E) ->
    gen_event:notify(?NAME, {log, E}).

%% report the all log
report() ->
  gen_event:call(?NAME, ?MODULE, report).

%% release this handler
release() ->
  gen_event:delete_handler(?NAME, ?MODULE, release).

init(_Arg) ->
    io:format("start recent log handler  Arg=~p~n",[_Arg]),
    {ok, []}.

handle_event({log, E}, List) ->
    io:format("long E=~p, List=~p~n",[E,List]),
    {ok, trim([E | List])}.

handle_call(report, List) ->
    {ok,List,List} .

terminate(stop, _List) ->
    io:format("recent log handler stop~n"),
    ok;
terminate(release, _List) ->
    io:format("recent log handler release~n"),
    ok.

%% save the recent five log
trim([E1, E2, E3, E4, E5 | []]) ->
    [E1, E2, E3, E4, E5];
trim(List) ->
    List.
 
0
2
分享到:
评论

相关推荐

    gen_server tasting 之超简单名称服务

    此外,`gen_server`通常与`gen_event`配合使用,后者提供了事件管理功能,可以用来处理日志、监控和其他系统事件。这样的组合可以让开发者构建出健壮、可扩展的Erlang应用。 在实际开发中,`gen_server`行为被广泛...

    gen_event_patterns:使用 Elixir GenEvent 处理程序进行探索

    这会向GenEvent管理器添加一个受监控的处理程序,但不会显式处理 :gen_event_EXIT 消息。 相反,它依赖于使其所在的服务器崩溃,以便它的主管可以重新启动它 用户add_mon_handler句柄退出: 这GenEvent管理器添加...

    Erlang实战

    - 事件管理器负责调度事件处理器,可以通过 `gen_event:start/2` 或 `gen_event:start_link/2` 启动。 - 支持动态添加或移除事件处理器。 #### 四、开发实践要点 - **遵循标准目录结构**:采用标准的OTP目录结构,...

    erlang的翻译文档

    - **独占式事件管理器**:解释了如何处理独立的Gen_Event实例。 #### 三、总结 Erlang以其独特的并发模型、轻量级进程和容错机制而在分布式系统领域具有显著优势。通过学习Erlang/OTPR11B文档,初学者可以逐步...

    Erlang_OTP_设计原理(含目录).pdf

    行为(Behavior)是一组预定义的模式,用于实现常见类型的进程,如服务器进程(Gen_Server)、有限状态机(Gen_Fsm)、事件处理器(Gen_Event)和监督进程(Supervisor)。这些行为模式通过行为模块和回调模块的分离...

    fluent-logger-erlang:搬家了

    例子 1 > { ok , _Pid } = gen_event : start ({ local , yourlogger }),2 > ok = gen_event : add_handler ( yourlogger , fluent_event , myapp ),ep18 3 > ok = gen_event : notify ( yourlogger , { access , {...

    OTP Design Principles

    - **启动EventManager**:使用`gen_event:start/1`启动。 - **添加事件处理器**:使用`gen_event:add_handler/3`函数添加。 - **通知事件**:通过`gen_event:notify/2`通知事件。 - **删除事件处理器**:使用`gen_...

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

    6. Gen_Event(Event Handling): `gen_event.html`涉及到事件处理器,它允许多个事件处理器同时监听和响应同一事件。这提供了事件分发的灵活性,支持动态添加和删除事件处理函数。 7. Appup(Upgrade and ...

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

    它包含了一组设计原则和库模块,如 supervision trees(监督树)、gen_server行为、gen_event行为等,为开发者提供了一种结构化的方式来处理并发和错误恢复。 1. **Supervision Trees**:OTP的核心概念之一是监督树...

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

    5. **行为模式(Behaviours)**:如`gen_server`、`gen_event`和`supervisor`等,这些是Erlang OTP设计模式的实现,它们为特定的系统角色提供了基础架构。例如,`gen_server`适用于处理服务请求,`gen_event`用于...

    erlang server源码

    Erlang提供了一些预定义的行为模式,如gen_server、gen_event和gen_fsm等,它们为实现特定类型的服务提供了模板。echatServer可能使用gen_server行为来实现服务器的核心逻辑,包括用户注册、登录、发送和接收消息等...

    otp_src_21.1.tar.gz

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

    Erlang中文手册.pdf

    - **2.4 Gen_Event Behaviour**:讲解事件处理的行为。 - **2.4.1 事件处理原则**:事件处理的一般原则。 - **2.4.2 实例**:提供了一个Gen_Event行为的实例。 - **2.4.3 启动一个事件管理器**:如何启动事件管理...

    otp_src_22.0_h.tar.gz

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

    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 Design Principles之Gen中文

    首先,Gen_Fsm行为的核心是一个有限状态机(FSM),它通过一系列状态(State)和事件(Event)来描述系统的行为。当系统处于某个状态S,并且接收到事件E时,系统执行相应的动作(Actions)并转移到新的状态S'。在...

    otp_win64_23.1.exe|otp_win64_23.1.zip

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

    erlang_standard_snippets-源码.rar

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

    Erlang_OTP_设计原理 中文版

    例如Gen_Server、Gen_Fsm、Gen_Event和Supervisor等。每个行为模式都有其通用部分和特定部分。通用部分由Erlang/OTP库提供,开发者只需要专注于实现特定部分,即回调模块,以及根据需要导出特定的回调函数。 3. ...

Global site tag (gtag.js) - Google Analytics