[erlang-questions] Is using gen_server behaviour appropriate for his usecase?

Ali Sabil ali.sabil@REDACTED
Sun Dec 2 18:06:22 CET 2012


Hi all,

In case this would be useful, sometimes ago I put together a behavior
module for implementing generic processes that fit into the OTP supervision
trees. I didn't have much time to document it yet, but it's very stable and
has been used in production. You can find the code here:
https://github.com/asabil/gen_process



On Sun, Dec 2, 2012 at 3:27 AM, Robert Virding <
robert.virding@REDACTED> wrote:

> Sorry, I don't agree with you here. While using OTP is generally a Good
> Thing, using OTP because you know WHY you need to use use it is a Much Much
> Much Better Thing! You see cases of where people have blindly used
> gen_servers then struggle and produce convoluted code to get around the
> very features which gen_servers provide. So I would say that you should
> know what the basic Erlang provides and how you use it, know what OTP
> provides and how you use it and choose that which is closest to what you
> need.
>
> I am not saying that you shouldn't use OTP, I am saying you should know
> why you are using OTP.
>
> Actually it is not very difficult to roll your own processes which fit
> into OTP supervision trees. It is done using the proc_lib and sys modules
> and it describe quite well here
> http://www.erlang.org/doc/design_principles/spec_proc.html .
>
> Robert
>
> ----- Original Message -----
> > From: "Garrett Smith" <g@REDACTED>
> > To: "Vineet Naik" <naikvin@REDACTED>
> > Cc: erlang-questions@REDACTED
> > Sent: Friday, 30 November, 2012 2:48:54 PM
> > Subject: Re: [erlang-questions] Is using gen_server behaviour
> appropriate for his usecase?
> >
> > Roman is spot on correct.
> >
> > There's a school of thought that says new developers should learn
> > core
> > Erlang and master it before tackling OTP. IMHO this is wrong. OTP
> > *is*
> > core Erlang at this point.[1]
> >
> > Just use OTP, right away. If the many moving parts of the standard
> > OTP
> > behaviors seems like a steep learning curve, take a look at e2:
> >
> > http://e2project.org
> >
> > e2 is a veneer on top of OTP that, at least in my opinion (I wrote it
> > for this reason :) makes canonical development a lot easier. You
> > might
> > start by reading/following the tutorial:
> >
> > http://e2project.org/tutorial.html
> >
> > The tutorial has more to do with general application development in
> > Erlang than it does in with the specifics of the e2 library.
> >
> > Garrett
> >
> > [1] There's a long history of Erlang that separates the core from
> > OTP.
> > I understand how books, tutorials, teaching philosophies, and common
> > wisdom would treat OTP as an advanced topic. But as a relative
> > newcomer to Erlang, not having any historical context, etc. I found
> > this treatment unhelpful in my own learning. IMO "gen_server" (e2
> > calls these "services" and "tasks" depending on the scenario) is a
> > starting point, after one has learned the basics of the language
> > itself.
> >
> > On Fri, Nov 30, 2012 at 2:36 AM, Roman Gafiyatullin
> > <r.gafiyatullin@REDACTED> wrote:
> > > Hi,
> > >
> > > In most of the cases one shall not use "simple loop functions": raw
> > > process
> > > cannot participate properly in the supervision tree.
> > >
> > > If you need some new tricky specific model of behaving - better
> > > implement it
> > > over gen_server.
> > > For instance supervisor is a gen_server :)
> > >
> > > If you need something more low level - use 'gen' module (see how
> > > gen_fsm is
> > > implemented).
> > >
> > > --
> > > Regards
> > > RG ( +375 33 602 5080, UTC+3 )
> > >
> > > On Friday, November 30, 2012 at 11:25 am, Vineet Naik wrote:
> > >
> > > Hello,
> > >
> > > I am an Erlang newbie and trying to write a simple chat bot as an
> > > XMPP external component. I am using exmpp library and following
> > > along these tutorials[1]
> > >
> > > So far I have one module `bot_server` that uses the gen_server
> > > interface. Inside it's `handle_info` callback, incoming messages
> > > from various client will be received. To handle and reply to the
> > > these messages, I am thinking of spawning a "bot" process per
> > > client. It will stay alive as long as the client is available
> > > ie. when the client sends "unavailable" presence, it will die. I
> > > also need to keep a list of all the alive bot processes in the
> > > bot_server's state.
> > >
> > > My question is, would it be appropriate to implement the bot as a
> > > gen_server too considering that it needs to handle two calls, one
> > > for handling incoming message (asynchronous) and second for
> > > killing itself (synchronous)?
> > >
> > > In general, when should one use gen_server and when should
> > > one write a simple loop function?
> > >
> > > [1] exmpp tutorials:
> > >
> http://blog.process-one.net/scalable_xmpp_bots_with_erlang_and_exmpp_part_i/
> > >
> > > Thanks,
> > > Vineet
> > > _______________________________________________
> > > erlang-questions mailing list
> > > erlang-questions@REDACTED
> > > http://erlang.org/mailman/listinfo/erlang-questions
> > >
> > >
> > >
> > > _______________________________________________
> > > erlang-questions mailing list
> > > erlang-questions@REDACTED
> > > http://erlang.org/mailman/listinfo/erlang-questions
> > >
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://erlang.org/mailman/listinfo/erlang-questions
> >
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20121202/e34d2003/attachment.htm>


More information about the erlang-questions mailing list