我有一个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}形式的处理程序显示它。

最佳答案

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

10-02 22:21