[erlang-questions] questions about gen_server behaviour

Ulf Wiger (TN/EAB) <>
Fri May 25 15:00:16 CEST 2007


 
A synchronous request is similar to
 
call(Server, Request) ->
   MonRef = erlang:monitor(process, Server),
   Msg = {'$gen_call', {self(), MonRef}, Request},
   Server ! Msg,
   receive
      {MonRef, Reply} -> Reply;
      {'DOWN', MonRef, _, _, _} -> erlang:error(...);
   after 5000 -> 
      erlang:error(timeout
   end.
 
(The actual code is a little bit more contrived.)
 
A cast is simply:
 
cast(Server, Msg) ->
   Server ! {'$gen_cast', Msg},
   ok.
 
So to answer your question, the gen_server sends the reply in the case
of a synchronous call.
 
The 'ok' in cast is not _sent_, it is simply the return value from the
cast/2 function.
 
With a call, you get actual acknowledgment from the server that the
request was received and processed. With cast, you have no such
information. The message may have been received and understood, but you
cannot know that.
 
Cast is also asynchronous, while call isn't. Call gives a form of flow
control.
 
BR,
Ulf W


________________________________

	From: 
[mailto:] On Behalf Of Ming
Zhao(Jimmy)
	Sent: den 25 maj 2007 14:46
	To: 
	Subject: [erlang-questions] questions about gen_server behaviour
	
	
	Could anyone explain these two functions below in details
(better with example)?
	1.synchronous request ----call
	Makes a synchronous call to the gen_server by sending a request
and waiting until a reply arrives or a timout occurs.
	who sends the reply? what exactly is the reply? 
	2.asynchronous request ----cast
	Sends an asynchronous request to the gen_server and returns ok
immediately
	who sends the ok? 
	
	these 2 functions seems to me the same ,
	so confused by them ..
	
	BR
	Thanks
	Jimmy
	
	-- 
	Ming   Zhao
	Dobelnsgatan 2C  231
	752 37 Uppsala, SWE
	
	Email: 
	Tel: +46 (0)736964077
	MSN:
	
	Skype: zhaoomingg 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20070525/f8e05fae/attachment.html>


More information about the erlang-questions mailing list