marketplace-2014/Examples.html

17 lines
61 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">
2014-01-18 01:58:19 +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="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.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 tocviewlisttopspace"><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="Examples.html" 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="Examples.html" 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="Examples.html#%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="Examples.html#%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="Examples.html#%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="#%28part._echo-server-example%29" class="tocsubseclink" data-pltdoc="x">TCP echo server</a></td></tr><tr><td><span class="tocsublinknumber">6.2<tt>&nbsp;</tt></span><a href="#%28part._chat-server-example%29" class="tocsubseclink" data-pltdoc="x">TCP chat server</a></td></tr><tr><td><span class="tocsublinknumber">6.3<tt>&nbsp;</tt></span><a href="#%28part._chat-client-example%29" 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">6.0.0.1</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;Marketpla
2013-06-11 00:04:06 +00:00
arriving on port 5999 and <span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._spawn%29%29" class="RktStxLink" data-pltdoc="x">spawn</a></span>s a fresh process in response
to each with the help of the auxiliary <span class="RktSym">echoer</span> function. The
topic of conversation associated with the each new connection is
parsed (with <span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._match-conversation%29%29" class="RktStxLink" data-pltdoc="x">match-conversation</a></span>) to name the remote
2013-05-20 20:45:07 +00:00
(<span class="RktSym">from</span>) and local (<span class="RktSym">to</span>) TCP addresses, which are
2013-06-11 00:04:06 +00:00
passed to <span class="RktSym">echoer</span> to create the initial state and actions for
the corresponding process. In this case, the process is stateless,
indicated by the special constant <span class="RktSym">stateless</span>.</p><p>Each connection&rsquo;s process watches for incoming data, using
<span class="RktSym">from</span> and <span class="RktSym">to</span> to configure a <span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._subscriber%29%29" class="RktStxLink" data-pltdoc="x">subscriber</a></span>. It
also declares its intent to produce outbound TCP data, using
<span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._publisher%29%29" class="RktStxLink" data-pltdoc="x">publisher</a></span>. When data arrives, it is echoed back to the remote
peer using the <span class="RktSym"><a href="high-level-interface.html#%28def._%28%28lib._marketplace%2Fsugar-values..rkt%29._send-message%29%29" class="RktValLink" data-pltdoc="x">send-message</a></span> operation. Absence notifications
signal disconnection; when the remote peer closes the TCP connection,
the <span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._on-absence%29%29" class="RktStxLink" data-pltdoc="x">on-absence</a></span> handler issues a <span class="RktSym"><a href="high-level-interface.html#%28def._%28%28lib._marketplace%2Fsugar-values..rkt%29._quit%29%29" class="RktValLink" data-pltdoc="x">quit</a></span> action, which
terminates the connection&rsquo;s process.</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"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._spawn-vm%29%29" class="RktStxLink" data-pltdoc="x">spawn-vm</a></span></td></tr><tr><td><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="high-level-interface.html#%28def._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._at-meta-level%29%29" class="RktValLink" data-pltdoc="x">at-meta-level</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._observe-publishers%29%29" class="RktStxLink" data-pltdoc="x">observe-publishers</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">tcp-channel</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="low-level-interface.html#%28def._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._~3f%29%29" class="RktValLink" data-pltdoc="x">?</a></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"><a href="low-level-interface.html#%28def._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._~3f%29%29" class="RktValLink" data-pltdoc="x">?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._match-conversation%29%29" class="RktStxLink" data-pltdoc="x">match-conversation</a></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="RktPn">(</span><span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._on-presence%29%29" class="RktStxLink" data-pltdoc="x">on-presence</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="high-level-interface.html#%28form._%28%28lib._marketplace%2Fsugar-untyped..rkt%29._spawn%29%29" class="RktStxLink" data-pltdoc="x">spawn</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><span class="RktPn">)</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#%28for