<p>A gen_server is there to handle a resource such that requests to that resource are handled sequentially. It sounds like that doesn't quite match your use case.</p>
<p>What you describe appears a little bit odd. Say you receive a request, and now, before you handle it, you check if more of the same request type has come in, and if they have, you add them in your "send results to" set. Now what? Do you check again? Or are you satisfied you can actually do some work?</p>

<p>Do you maybe want to memoize results? By adding results to your server state, you could reply to identical(?) requests via lookup, leaving the resource in peace.</p>
<p>Or do you require some kind of batching, only bothering the resource if enough interest is present? Maybe augmented with some kind of time limit? This would probably be a bit harder to implement.</p>
<p>Robby</p>
<div class="gmail_quote">On Jul 8, 2013 8:59 PM, "Jonathan Leivent" <<a href="mailto:jleivent@comcast.net">jleivent@comcast.net</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 07/08/2013 03:40 PM, Sergej Jurecko wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Easiest to explain with code:<br>
<br>
handle_call(Msg,From,State) -><br>
{noreply,State#rec{calls = [From | State#rec.calls}};<br>
<br>
handle_call(replyall,_,State) -><br>
[gen_server:reply(From,<u></u>SomeMessage) || From <- lists:reverse(State#rec.calls)<u></u>],<br>
{reply,ok,State}<br>
<br>
Queue instead of a list is probably better.<br>
<br>
<br>
Sergej<br>
</blockquote>
<br>
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.<br>

<br>
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.<br>
<br>
-- Jonathan<br>
<br>
______________________________<u></u>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-questions</a><br>
</blockquote></div>