[erlang-questions] Where can I use gen_server?

ryeguy ryeguy1@REDACTED
Fri Apr 3 17:52:21 CEST 2009


It's going to be from multiple processes, but right now I'm just doing
it from the shell to get it working. All I'm trying to do is find out
why all requests are taken down with the gen_server when it crashes?
If it does this, then what is the difference between start and
start_link?

On Apr 3, 2:09 am, Bengt Kleberg <bengt.kleb...@REDACTED> wrote:
> OK, you have one globally registered server that pretends to an instance
> of (the future) fleet of servers.
>
> How do you call this one server? From one process or many?
>
> bengt
>
>
>
> On Thu, 2009-04-02 at 08:12 -0700, ryeguy wrote:
> > Yeah sorry that's just test code mostly. I DO want one per client,  I
> > would actually globally register each as {player, <<"username">>}. I'm
> > just trying to get this working first.
>
> > On Apr 2, 3:00 am, Bengt Kleberg <bengt.kleb...@REDACTED> wrote:
> > > Greetings,
>
> > > It is not obvious to me how you use the gen_server below. You are
> > > registering it as global, but I understood your explanation below as if
> > > you wanted a separate gen_server for each client.
> > > Is the idea to have one gen_server, or one per client?
>
> > > bengt
>
> > > On Wed, 2009-04-01 at 19:34 -0700, ryeguy wrote:
> > > > Well why doesn't this work then?
>
> > > > start()               -> gen_server:start({global, ?MODULE}, ?MODULE,
> > > > [], []).
> > > > stop()                -> gen_server:call({global, ?MODULE}, stop).
> > > > test()                -> gen_server:cast({global, ?MODULE}, test).
> > > > test2()                -> gen_server:cast({global, ?MODULE}, test2).
>
> > > > init([]) ->process_flag(trap_exit, true),
> > > >     {ok, 0}.
>
> > > > handle_cast(test, State) ->
> > > >    timer:sleep(3000),
> > > >    io:format("asdasd"),
> > > >    {noreply, State};
> > > > handle_cast(test2, State) ->
> > > >    timer:sleep(3000),
> > > >    3=4,                 %%% deliberate error
> > > >    {noreply, State}.
>
> > > > handle_call(stop, _From, State) ->
> > > >     {stop, normal, stopped, State};
> > > > handle_call(test2, _From, State) ->
> > > >    3=4,
> > > >     {noreply, State}.
>
> > > > handle_info(_Info, State) ->
> > > >     {noreply, State}.
>
> > > > terminate(_Reason, _State) ->
> > > >     ok.
>
> > > > code_change(_OldVsn, State, _Extra) ->
> > > >     {ok, State}.
>
> > > > When I call test2() then call test(), test2 (obviously) crashes, but
> > > > test() appears to be terminated too.
>
> > > > On Apr 1, 10:12 am, Bengt Kleberg <bengt.kleb...@REDACTED> wrote:
> > > > > Greetings,
>
> > > > > If you start a gen_server with start_link() it will take its clients
> > > > > with it. If you start with start() the clients will remain.
>
> > > > > bengt
>
> > > > > On Mon, 2009-03-30 at 19:29 -0700, ryeguy wrote:
> > > > > > I'm making a game server, and I just can't see where I would want to
> > > > > > use a gen_server. I'm not set on using one, but I don't want to skimp
> > > > > > on using one where it would make it easier to program this app.
>
> > > > > > What I have per node is this: I have 1 process accepting new
> > > > > > connections, which spawns a new process for each new client. For each
> > > > > > packet that comes in, a new process is spawned to handle it and then
> > > > > > it sends the result back to the listening process and terminates.
>
> > > > > > It sounds like a good candidate for gen_server, but per the docs it
> > > > > > seems you want to use them when there is some shared resource that you
> > > > > > want to manage, and I don't see one. If I gave each client their own
> > > > > > gen_server, it wouldn't be good because if an erroneous packet was
> > > > > > sent that caused an exception, it would terminate their connection and
> > > > > > any other packets being processed for this client (since a gen_server
> > > > > > takes all of its spawned processes down with it, right?).
>
> > > > > > Is there any advantage to using gen_server in my situation?
> > > > > > _______________________________________________
> > > > > > erlang-questions mailing list
> > > > > > erlang-questi...@REDACTED
> > > > > >http://www.erlang.org/mailman/listinfo/erlang-questions
>
> > > > > _______________________________________________
> > > > > erlang-questions mailing list
> > > > > erlang-questi...@REDACTED://www.erlang.org/mailman/listinfo/erlang-questions
> > > > _______________________________________________
> > > > erlang-questions mailing list
> > > > erlang-questi...@REDACTED
> > > >http://www.erlang.org/mailman/listinfo/erlang-questions
>
> > > _______________________________________________
> > > erlang-questions mailing list
> > > erlang-questi...@REDACTED://www.erlang.org/mailman/listinfo/erlang-questions
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questi...@REDACTED
> >http://www.erlang.org/mailman/listinfo/erlang-questions
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questi...@REDACTED://www.erlang.org/mailman/listinfo/erlang-questions



More information about the erlang-questions mailing list