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

Garrett Smith g@REDACTED
Fri Nov 30 14:48:54 CET 2012

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:


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:


The tutorial has more to do with general application development in
Erlang than it does in with the specifics of the e2 library.


[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

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

More information about the erlang-questions mailing list