gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:15:57 25 4
gpt4 key购买 nike

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

我的测试设置看起来像这样(抱歉糟糕的缩进) enter image description here

运行时出现如下错误:

{'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}]}]}}

所以现在,我想知道我是不是做错了什么,或者这种架构是不是不可能。由于我的事件处理程序中的逻辑与我的应用程序完全相关,因此我更愿意将其保留在我的应用程序版本中。在我的事件管理器版本中为每个应用程序设置一个事件处理程序可能很快就会变得一团糟。

最佳答案

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

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

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

关于erlang - 是否可以将本地事件处理程序添加到远程事件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41800472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com