[erlang-questions] Implement standard API (was process hierarchy and passing references)

Ladislav Lenart <>
Fri Aug 15 16:02:10 CEST 2014


On 15.8.2014 11:49, Frans Schneider wrote:
> Hi list,
> Now that I got the supervision working, I am looking for a way to 
> implement a standard API for every "main" server. The API implements a 
> way for the main gen_server to call the RPC middleman and should also 
> define standard callbacks for the main server the middleman can use. The 
> API would also use some internal state. In a previous life, I would have 
> used inheritance to accomplish this, but how can I do this in Erlang?
> I had a look at the supervisor implementation, but was wondering if 
> there is a easier way to accomplish this.

I am not sure I follow you completely. However, if you want to parametrize
process behavior in Erlang (i.e. something similar to OO inheritance that you
mentioned), you can define your own behaviour (a module) and define different
callback modules that all implement it. The pattern is the same as with a
gen_server behaviour.

If this is not what you need, please provide us with a concrete example(s) that
you currently struggle with.

Ladislav Lenart

> Thanks
> Frans
> On 08/14/2014 05:16 PM, Ladislav Lenart wrote:
>> Hello again.
>> On 14.8.2014 17:00, Ladislav Lenart wrote:
>>> Hello.
>>> What about the following solution:
>>> * Put all three processes under one supervisor.
>>> * Set its restart strategy to one_for_all.
>> Or rest_for_one. This one may better suite your needs. For more info, refer to
>> the official documentation at: http://www.erlang.org/doc/man/supervisor.html
>>> * Pass supervisor's PID to its children.
>>> * Each worker process can lookup PID of its relevant sibling via
>>> supervisor:which_children/1.
>> HTH,
>> Ladislav Lenart
>>> On 14.8.2014 16:48, Schneider wrote:
>>>> Hi list,
>>>> Since I am very new to Erlang, I am not sure how to layout process
>>>> hierarchies in the following case:
>>>> Besides the domain specific functionality, every program has a RPC
>>>> middleman and an XML-RPC interface, each implemented as gen_servers. In
>>>> the current setup, the main gen_server process starts the RPC middleman,
>>>> passing it its Pid, and the RPC gen_server starts the XML-RPC server
>>>> which is passed the RPC middleman's Pid.
>>>> Using the passed in Pid's, the XML-RPC server can do a
>>>> gen_server:call()/cast() back to the RPC server which on its turn can
>>>> call the main server. Works ok, but I would like to have the RPC
>>>> middleman and XML-RPC controller under the control of a supervisor. The
>>>> main supervisor should start the main gen_server process plus a
>>>> supervisor that on its turn should start the RPC midleman and the
>>>> XML-RPC handler.
>>>> The thing I can't figure out is how the XML-RPC process should find the
>>>> RPC middleman process and how that process should locate the main server
>>>> when using supervision. Since there can be many RPC middlemen and
>>>> XMP-RPC servers around, each belonging to different main servers, naming
>>>> and registering seems a little hard.
>>>> So how to pass references around?
>>>> Any help will be very much appreciated.
>>>> Frans
>>>> _______________________________________________
>>>> erlang-questions mailing list
>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>> _______________________________________________
>>> erlang-questions mailing list
>>> http://erlang.org/mailman/listinfo/erlang-questions
> _______________________________________________
> erlang-questions mailing list
> http://erlang.org/mailman/listinfo/erlang-questions

More information about the erlang-questions mailing list