当前位置:  开发笔记 > 编程语言 > 正文

是否可以将本地事件处理程序添加到远程事件管理器

如何解决《是否可以将本地事件处理程序添加到远程事件管理器》经验,为你挑选了1个好方法。

我有一个在自己的Erlang节点中运行的事件管理器.我想将它用作一个简单的事件代理,并让其他节点上的其他应用程序通过添加自己的事件处理程序来订阅它.

我的测试设置看起来像这样(抱歉可怕的缩进) 在此输入图像描述

运行时我收到如下错误:

{'EXIT',{undef,[{event_handler_a,init,[[]],[]},
                {gen_event,server_add_handler,4,
                           [{file,"gen_event.erl"},{line,429}]},
                {gen_event,handle_msg,5,[{file,"gen_event.erl"},{line,270}]},
                {proc_lib,init_p_do_apply,3,
                          [{file,"proc_lib.erl"},{line,247}]}]}}

所以现在,我想知道我做错了什么或者这个架构是不可能的.由于我的事件处理程序中的逻辑与我的应用程序完全相关,我宁愿将其保留在我的应用程序版本中.在我的事件管理器版本中为每个应用程序提供一个事件处理程序可能会很快变得混乱.



1> legoscia..:

不,这是不可能的.gen_event与其他行为有点不同,因为回调模块中的代码(作为参数传递的代码gen_event:add_handler/3)在事件管理器相同的进程中运行.因此,如果事件管理器在远程节点上运行,则事件处理程序将在同一节点上运行.

实现此目的的一种方法是创建一个事件处理程序回调模块,该模块将事件转发到所需节点上的进程.然后你可以做这样的事情:

gen_event:add_handler({event_manager, node1@host1}, my_event_forwarder, [self()]).

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有