[erlang-questions] Using gen_server or writing a new behavior
Ciprian Dorin, Craciun
Fri Jan 16 18:15:32 CET 2009
On Fri, Jan 16, 2009 at 6:30 PM, Christian <> wrote:
> On Fri, Jan 16, 2009 at 16:21, Ciprian Dorin, Craciun
> <> wrote:
>> Hello all!
>> I have a somehow philosophycal question about OTP, mainly about
>> I want to write my own HTTP framework, the main focus now being
>> the request handlers... So:
>> * I created a request handler supervisor, which managed the
>> request handlers;
>> * each connection handler after resolving the request handler,
>> delegates the request to it;
> This is how I have it:
> * each request is a process that look at the method, url, etc,
> dispatch to functions that parse what is needed, such as posted bodies
> or query args.
> * all the data goes into a function that calls plain ordinary
> gen_servers (if they need to at all!), still in the same process
> * the result is sent to a template function that renders the result
> values to something htmlish, and still in the same process.
What do you mean by "calls plain ordinary gen_servers still in the
same process"? Calling a gen_server implies sending a message to a
gen_server process, right?
> This is because sending each request directly into a gen_server will
> limit concurrency. While it processes one requests, others could be
> _waiting to be served_. The latter being the problem.
Yes, indeed this would happen, and this would be an
disadvantage... (Limiting concurency, adding message passing overhead)
But there are two reasons I would like to do this (that is using
gen_server like processes):
* first is that it looks more Erlang-ish, than dispatching the
request to a module:function... (the Erlang way is have lot's of
* second, I could create multiple request handlers that are used
in a round robin fashion; (and thus control the load on a given set of
URLs, without having fancy code behind it, just by limiting the number
of registered handlers);
As a side note, this is what bothers me with most Erlang http
servers: they use module:callback dispatchers and not processes... It
adds performance, but reduces flexibility / OTP-way of doing things
(if there is such a thing)...
> Additionally, my way the gen_servers that I do need, for ordering
> access to some resources, have no dependencies on http requests. They
> instead expose the sanest messages possible for the manipulations to
> the resource they keep.
> You should probably look into "beepbeep" since it does pretty much
> exactly what i describe. It also uses erlydtl which is a pretty cool
> template language.
I'll look into them. Thanks,
More information about the erlang-questions