[erlang-questions] How can i communicate with a gen_server-based server

Christian S chsu79@REDACTED
Fri Mar 28 09:36:58 CET 2008


On Fri, Mar 28, 2008 at 9:16 AM, wenew zhang <wenewboy@REDACTED> wrote:
> Dear All,
>  handle_call(Request, _From, State) ->
>     {stop, {unknown_call, Request}, State}.

I suggest that you use the handle_call-feature of the gen_server behavior.

handle_call({authenticate, Login, Password}, _From, State) ->
   {reply, lookup_user(Login, Password), State};
handle_call(Request, _From, State) ->
   {stop, {unknown_call, Request}, State}.

You are registering your gen_server globally as ?MODULE, that is, the
name of the module: 'authserver'.

That registering means that you should be able to call
gen_server:call(authserver, {authenticate, Login, Password}) from any
node. Using gen_server:call/3 you can also give this call a timeout.

>  3> Pid!{213,'root','12345'}.
>  ** exception error: bad argument
>      in operator  !/2
>         called as {ok,<0.32.0>} ! {213,root,'12345'}

The error message is letting you know that in "Pid ! {213, root,
'12345'}" the value of Pid is {ok, <process id>}.

This means you should have written {ok, Pid} = authserver:start_link().

But as you register the gen_server process as 'authserver', you dont
really need the Pid.



More information about the erlang-questions mailing list