【问题标题】:Forward events from a GenEvent server to my process in elixir otp将事件从 GenEvent 服务器转发到我在 elixir otp 中的进程
【发布时间】:2015-12-25 11:37:45
【问题描述】:

我有一个 GenEvent 服务器,当我向主服务器发送事件通知时,我希望能够添加几个进程来获取转发事件。

我可以创建一个转发器模块并传递一个 pid 来发送消息,但是因为它看起来像它必须是一个常见的模式,我想知道是否有更好的方法。

GenEvent docs 中,处理程序的类型是

handler :: atom | {atom, term} | {pid, reference}

当我尝试将最后一个表单的处理程序添加到 GenEvent 服务器时,我总是收到错误。

GenEvent.add_mon_handler(pid, {self, make_ref}, [])
{:error,
 {:badarg,
  [{:erlang, :apply, [#PID<0.59.0>, :init, [[]]], []},
   {GenEvent, :do_handler, 3, [file: 'lib/gen_event.ex', line: 990]},
   {GenEvent, :do_add_handler, 5, [file: 'lib/gen_event.ex', line: 947]},
   {GenEvent, :handle_msg, 5, [file: 'lib/gen_event.ex', line: 608]},
   {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 240]}]}}

elixir 文档中没有关于如何添加由 pid 和引用组成的处理程序的更多信息。 gen_event 的 erlang documentation 仅使用 atom{atom, term} 形式的处理程序显示它。

【问题讨论】:

    标签: pid elixir erlang-otp


    【解决方案1】:

    这是一个文档问题。函数GenEvent.add_mon_handler/3 不再采用由{pid, ref} 组成的处理程序。 https://groups.google.com/forum/#!topic/elixir-lang-talk/gyVce092C7I

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-03
      • 2017-01-26
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2023-03-18
      相关资源
      最近更新 更多