Erlang: gen_server or my own custom server?
erlang, gen-server
Solution
`gen_server` will have a negligible overhead compared to self-implemented servers, because it requires a few additional function calls per message (one of which is dynamic). I don't think you should consider this at this point of implementation. Did you changed your mind at any point, moving from `gen_server` to your own server should be straightforward.
What you get with `gen_server` compared to a simple loop is:
- debugging (with sys)
- SASL logging
- hibernation support
- code upgrade support
Problem
I need to write a server that will receive instructions from other modules and take actions depending on the instructions received. Efficiency is my main concern. So do I use `gen_server` or do I write my own server. By "my own server" I mean something like: ``` -module(myserver). -export([start/0, loop/0]). start() -> spawn(myserver, loop, []). loop() -> receive {From, Msg} -> %Do some action here... ; message2 -> %Do some action here...; message3 -> %Do some action here...; message4 -> %Do some action here...; . . . _-> ok end, loop(). ``` So to use `myserver`, I will probably register the process under a registered name while starting it, and then each client will send messages to the server using this pid. So should I use this method, or instead implement the server using the `gen_server` behaviour? Are there any advantages to using `gen_server`? But will using `gen_server` add any overhead, when compared to `myserver`?