[erlang-questions] gen_server aggregating calls/casts

Jonathan Leivent jleivent@REDACTED
Mon Jul 8 21:59:47 CEST 2013


On 07/08/2013 03:40 PM, Sergej Jurecko wrote:
> Easiest to explain with code:
>
> handle_call(Msg,From,State) ->
> {noreply,State#rec{calls = [From | State#rec.calls}};
>
> handle_call(replyall,_,State) ->
> [gen_server:reply(From,SomeMessage) || From <- lists:reverse(State#rec.calls)],
> {reply,ok,State}
>
> Queue instead of a list is probably better.
>
>
> Sergej

As I said: "It can't accumulate calls into its state because there are 
other unrelated calls/casts it can encounter prior to seeing all of the 
currently queued matching calls."  Also, it will never get anything like 
your replyall call.

Maybe I need two separate gen_server processes - one to just receive the 
requests and aggregate them into its state, then hand them off to the 
other, which handles both the aggregated requests and other calls/casts.

-- Jonathan




More information about the erlang-questions mailing list