marketplace-2014/Examples.html

19 lines
51 KiB
HTML
Raw Normal View History

2013-05-20 20:45:07 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2013-05-20 22:14:06 +00:00
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /><title>6&nbsp;Examples</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default" /><link rel="stylesheet" type="text/css" href="racket.css" title="default" /><link rel="stylesheet" type="text/css" href="scribble-style.css" title="default" /><script type="text/javascript" src="scribble-common.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist" style="margin-bottom: 1em;"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9660;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">Marketplace:<span class="mywbr"> &nbsp;</span> Network-<wbr></wbr>Aware Programming</a></td></tr></table></div><div class="tocviewsublisttop" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="Concepts.html" class="tocviewlink" data-pltdoc="x">Concepts</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="high-level-interface.html" class="tocviewlink" data-pltdoc="x">High-<wbr></wbr>level interface</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="low-level-interface.html" class="tocviewlink" data-pltdoc="x">Low-<wbr></wbr>level interface</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="Drivers.html" class="tocviewlink" data-pltdoc="x">Drivers</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="Management_and_Monitoring.html" class="tocviewlink" data-pltdoc="x">Management and Monitoring</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="" class="tocviewselflink" data-pltdoc="x">Examples</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_1&quot;);">&#9658;</a></td><td>6&nbsp;</td><td><a href="" class="tocviewselflink" data-pltdoc="x">Examples</a></td></tr></table><div class="tocviewsublistbottom" style="display: none;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">6.1&nbsp;</td><td><a href="#%28part._echo-server-example%29" class="tocviewlink" data-pltdoc="x">TCP echo server</a></td></tr><tr><td align="right">6.2&nbsp;</td><td><a href="#%28part._chat-server-example%29" class="tocviewlink" data-pltdoc="x">TCP chat server</a></td></tr><tr><td align="right">6.3&nbsp;</td><td><a href="#%28part._chat-client-example%29" class="tocviewlink" data-pltdoc="x">TCP chat client</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><span class="tocsublinknumber">6.1<tt>&nbsp;</tt></span><a href="#(part._echo-server-example)" class="tocsubseclink" data-pltdoc="x">TCP echo server</a></td></tr><tr><td><span class="tocsublinknumber">6.2<tt>&nbsp;</tt></span><a href="#(part._chat-server-example)" class="tocsubseclink" data-pltdoc="x">TCP chat server</a></td></tr><tr><td><span class="tocsublinknumber">6.3<tt>&nbsp;</tt></span><a href="#(part._chat-client-example)" class="tocsubseclink" data-pltdoc="x">TCP chat client</a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="version">5.3.4.10</span></div><div class="navsettop"><span class="navleft">&nbsp;&nbsp;</span><span class="navright">&nbsp;&nbsp;<a href="Management_and_Monitoring.html" title="backward to &quot;5 Management and Monitoring&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="index.html" title="up to &quot;Marketplace: Network-Aware Programming&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<span class="nonavigation">next &rarr;</span></span>&nbsp;</div><h3>6<tt
2013-05-20 20:45:07 +00:00
arriving on port 5999, and <span class="RktSym">spawn</span>s a fresh process in response to
each (<span class="RktPn">#:on-presence</span>). The topic of
conversation (<span class="RktPn">#:conversation</span>) associated with the newly-present
subscription is analyzed to give the remote
(<span class="RktSym">from</span>) and local (<span class="RktSym">to</span>) TCP addresses, which are
passed to the <span class="RktSym">echoer</span> function to give the initial actions for
the corresponding process. Here, the process is stateless, using the
special constant <span class="RktSym">stateless</span> as its state.</p><p>Each connection&rsquo;s process creates an endpoint subscribing to data
arriving on its particular connection, using <span class="RktSym">from</span> and <span class="RktSym">to</span>
passed in from the top-level <span class="RktSym">endpoint</span>. When data arrives, it is
echoed back to the remote peer using <span class="RktSym">send-message</span>. Presence
manages disconnection; when the remote peer closes the TCP connection,
the <span class="RktPn">#:on-absence</span> handler in <span class="RktSym">echoer</span> issues a <span class="RktSym">quit</span>
action, terminating the connection&rsquo;s process. The heart of our system
is the interface between a process and its containing VM. Our
implementation instantiates this interface as a collection of Typed
2013-05-20 22:14:06 +00:00
Racket programs.</p><h4>6.2<tt>&nbsp;</tt><a name="(part._chat-server-example)"></a>TCP chat server</h4><blockquote class="SCodeFlow"><blockquote class="Rfilebox"><p class="Rfiletitle"><span class="Rfilename"><span class="stt">"examples/chat-paper.rkt"</span></span></p><blockquote class="Rfilecontent"><table cellspacing="0" class="RktBlk"><tr><td><a href="http://docs.racket-lang.org/guide/Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace">&nbsp;</span><a href="low-level-interface.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">marketplace</span></a></td></tr><tr><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym">nested-vm</span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">at-meta-level</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym">endpoint</span><span class="hspace">&nbsp;</span><span class="RktPn">#:subscriber</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">tcp-channel</span><span class="hspace">&nbsp;</span><span class="RktSym">?</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">tcp-listener</span><span class="hspace">&nbsp;</span><span class="RktVal">5999</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">?</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">#:observer</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:conversation</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">tcp-channel</span><span class="hspace">&nbsp;</span><span class="RktSym">them</span><span class="hspace">&nbsp;</span><span class="RktSym">us</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="http://docs.racket-lang.org/reference/stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29.__%29%29" class="RktStxLink" data-pltdoc="x">_</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">#:on-presence</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">spawn</span><span class="hspace">&nbsp;</span><span class="RktPn">#:child</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">chat-session</span><span class="hspace">&nbsp;</span><span class="RktSym">them</span><span class="hspace">&nbsp;</span><span class="RktSym">us</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="http://docs.racket-lang.org/ts-reference/special-forms.html#%28form._%28%28lib._typed-racket%2Fbase-env%2Fprims..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">chat-session</span><span class="hspace">&nbsp;</span><span class="RktSym">them</span><span class="hspace">&nbsp;</span><span class="RktSym">us</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="http://docs.racket-lang.org/ts-reference/special-forms.html#%28form._%28%28lib._typed-racket%2Fbase-env%2Fprims..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktSym">user</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="http://docs.racket-lang.org/reference/symbols.html#%28def._%28%28quote._~23~25kernel%29._gensym%29%29" class="RktValLink" d