[erlang-questions] gproc and gen_event

Andrew Berman <>
Sat May 19 01:38:33 CEST 2012


Ok, cool, thanks Garrett.

Do you have any experience using gproc for pub/sub?

Nice email address, btw :-)

Andrew

On Fri, May 18, 2012 at 2:30 PM, Garrett Smith <> wrote:

> On Thu, May 17, 2012 at 7:14 PM, Andrew Berman <> wrote:
> > Hello,
> >
> > I am trying to set up a pub-sub type situation where I have a function
> > called which does some stuff and at the end broadcasts a message.  I
> would
> > like for multiple handlers to be able to receive that message and do
> > something with it.  I'm currently using gen_event, but have been reading
> > about gproc as well.  Can anyone explain why they'd use one over the
> other
> > for pub/sub?
>
> gen_event is useful when you need to support "pluggable" functionality
> and you can't tolerate the overhead of Erlang message passing.
>
> gen_event runs all handlers in a single process. If one of those
> subscribers misbehaves, it's unceremoniously removed.
>
> To give you an idea:
>
> Eshell V5.8.5  (abort with ^G)
> 1> error_logger:info_msg("say hello").
>
> =INFO REPORT==== 18-May-2012::16:13:25 ===
> say hellook
> 2> error_logger:info_msg([{"say", "goodbye"}]).
> ok
> 3> error_logger:info_msg("anyone?").
> ok
>
> error_logger uses gen_event -- tty support is a handler. Bugs, as the
> one above, result in silent changes to your program!
>
> While you can use add_handler_sup to get notification of a handler
> delete, I find the whole facility easy to get wrong and so I avoid it.
>
> But it's not hard to create a publisher in yourself. e2 [1] has
> something you can steal from, or just use:
>
> https://github.com/gar1t/e2/blob/master/src/e2_publisher.erl
>
> Here's a silly example of a "broker" that decorates published messages
> with some tag:
>
> https://github.com/gar1t/e2/blob/master/examples/pubsub/src/broker.erl
>
> The advantage of pubsub using Erlang messages over gen_event is that
> you can implement more natural supervision -- and you're not going to
> get silent, mysterious breakage. The price is that you're sending
> Erlang messages. If you can't afford that (e.g. perhaps high
> throughput logging) gen_event is better.
>
> Garrett
>
> [1] http://e2project.org/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20120518/2a929950/attachment.html>


More information about the erlang-questions mailing list