Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > c3732731228538f6126cae930c10ad71 > files > 194

python-pyro4-4.21-3.mga4.noarch.rpm



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Name Server &mdash; Pyro 4.21 documentation</title>
    
    <link rel="stylesheet" href="_static/default.css" type="text/css" />
    <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '4.21',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="_static/jquery.js"></script>
    <script type="text/javascript" src="_static/underscore.js"></script>
    <script type="text/javascript" src="_static/doctools.js"></script>
    <link rel="top" title="Pyro 4.21 documentation" href="index.html" />
    <link rel="next" title="Security" href="security.html" />
    <link rel="prev" title="Servers: publishing objects" href="servercode.html" /> 
  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="security.html" title="Security"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="servercode.html" title="Servers: publishing objects"
             accesskey="P">previous</a> |</li>
        <li><a href="index.html">Pyro 4.21 documentation</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="name-server">
<span id="id1"></span><h1>Name Server<a class="headerlink" href="#name-server" title="Permalink to this headline">¶</a></h1>
<p>The Pyro Name Server is a tool to help keeping track of your objects in your network.
It is also a means to give your Pyro objects logical names instead of the need to always
know the exact object name (or id) and its location.</p>
<p>Pyro will name its objects like this:</p>
<div class="highlight-python"><pre>PYRO:obj_dcf713ac20ce4fb2a6e72acaeba57dfd@localhost:51850
PYRO:custom_name@localhost:51851</pre>
</div>
<p>It&#8217;s either a generated unique object id on a certain host, or a name you chose yourself.
But to connect to these objects you&#8217;ll always need to know the exact object name or id and
the exact hostname and port number of the Pyro daemon where the object is running.
This can get tedious, and if you move servers around (or Pyro objects) your client programs
can no longer connect to them until you update all URIs.</p>
<p>Enter the <em>name server</em>.
This is a simple phone-book like registry that maps logical object names to their corresponding URIs.
No need to remember the exact URI anymore. Instead, you can ask the name server to look it up for
you. You only need to give it the logical object name.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Usually you only need to run <em>one single instance</em> of the name server in your network.
You can start multiple name servers but they are unconnected; you&#8217;ll end up with a partitioned name space.</p>
</div>
<p><strong>Example scenario:</strong>
Assume you&#8217;ve got a document archive server that publishes a Pyro object with several archival related methods in it.
This archive server can register this object with the name server, using a logical name such as
&#8220;Department.ArchiveServer&#8221;. Any client can now connect to it using only the name &#8220;Department.ArchiveServer&#8221;.
They don&#8217;t need to know the exact Pyro id and don&#8217;t even need to know the location.
This means you can move the archive server to another machine and as long as it updates its record in the
name server, all clients won&#8217;t notice anything and can keep on running without modification.</p>
<div class="section" id="starting-the-name-server">
<span id="nameserver-nameserver"></span><h2>Starting the Name Server<a class="headerlink" href="#starting-the-name-server" title="Permalink to this headline">¶</a></h2>
<p>The easiest way to start a name server is by using the command line tool.</p>
<p>synopsys: <strong class="command">python -m Pyro4.naming [options]</strong></p>
<p>Starts the Pyro Name Server. It can run without any arguments but there are several that you
can use, for instance to control the hostname and port that the server is listening on.
A short explanation of the available options can be printed with the help option.
When it starts, it prints a message similar to this:</p>
<div class="highlight-python"><pre>$ python -m Pyro4.naming -n neptune
Broadcast server running on 0.0.0.0:9091
NS running on neptune:9090 (192.168.1.100)
URI = PYRO:Pyro.NameServer@neptune:9090</pre>
</div>
<p>As you can see it prints that it started a broadcast server (and its location),
a name server (and its location), and it also printed the URI that clients can use
to access it directly. These things will be explained below.</p>
<p>There are several command line options:</p>
<dl class="option">
<dt id="cmdoption-Pyro4.naming-h">
<tt class="descname">-h</tt><tt class="descclassname"></tt><tt class="descclassname">, </tt><tt class="descname">--help</tt><tt class="descclassname"></tt><a class="headerlink" href="#cmdoption-Pyro4.naming-h" title="Permalink to this definition">¶</a></dt>
<dd><p>Print a short help message and exit.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming-n">
<tt class="descname">-n</tt><tt class="descclassname"> HOST</tt><tt class="descclassname">, </tt><tt class="descname">--host</tt><tt class="descclassname">=HOST</tt><a class="headerlink" href="#cmdoption-Pyro4.naming-n" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify hostname or ip address to bind the server on.
The default is localhost.
If the server binds on localhost, <em>no broadcast responder</em> is started.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming-p">
<tt class="descname">-p</tt><tt class="descclassname"> PORT</tt><tt class="descclassname">, </tt><tt class="descname">--port</tt><tt class="descclassname">=PORT</tt><a class="headerlink" href="#cmdoption-Pyro4.naming-p" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify port to bind server on (0=random).</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming-u">
<tt class="descname">-u</tt><tt class="descclassname"> UNIXSOCKET</tt><tt class="descclassname">, </tt><tt class="descname">--unixsocket</tt><tt class="descclassname">=UNIXSOCKET</tt><a class="headerlink" href="#cmdoption-Pyro4.naming-u" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify a Unix domain socket name to bind server on, rather than a normal TCP/IP socket.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming--bchost">
<tt class="descname">--bchost</tt><tt class="descclassname">=BCHOST</tt><a class="headerlink" href="#cmdoption-Pyro4.naming--bchost" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify the hostname or ip address to bind the broadcast responder on.
Note: if the hostname where the name server binds on is localhost (or 127.0.x.x),
no broadcast responder is started.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming--bcport">
<tt class="descname">--bcport</tt><tt class="descclassname">=BCPORT</tt><a class="headerlink" href="#cmdoption-Pyro4.naming--bcport" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify the port to bind the broadcast responder on (0=random).</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming--nathost">
<tt class="descname">--nathost</tt><tt class="descclassname">=NATHOST</tt><a class="headerlink" href="#cmdoption-Pyro4.naming--nathost" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify the external host name to use in case of NAT</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming--natport">
<tt class="descname">--natport</tt><tt class="descclassname">=NATPORT</tt><a class="headerlink" href="#cmdoption-Pyro4.naming--natport" title="Permalink to this definition">¶</a></dt>
<dd><p>Specify the external port use in case of NAT</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.naming-x">
<tt class="descname">-x</tt><tt class="descclassname"></tt><tt class="descclassname">, </tt><tt class="descname">--nobc</tt><tt class="descclassname"></tt><a class="headerlink" href="#cmdoption-Pyro4.naming-x" title="Permalink to this definition">¶</a></dt>
<dd><p>Don&#8217;t start a broadcast responder.</p>
</dd></dl>

<p>Another way is doing it from within your own code.
This is much more complex because you will have to integrate the name server
into the rest of your program (perhaps you need to merge event loops).
A helper function is available to create it in your program: <a class="reference internal" href="api/naming.html#Pyro4.naming.startNS" title="Pyro4.naming.startNS"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.naming.startNS()</span></tt></a>.
Look at the <tt class="file docutils literal"><span class="pre">eventloop</span></tt> example to see how you can use this.</p>
</div>
<div class="section" id="configuration-items">
<h2>Configuration items<a class="headerlink" href="#configuration-items" title="Permalink to this headline">¶</a></h2>
<p>There are a couple of config items related to the nameserver.
They are used both by the name server itself (to configure the values it will use to start
the server with), and the client code that locates the name server (to give it optional hints where
the name server is located). Often these can be overridden with a command line option or with a method parameter in your code.</p>
<table border="1" class="docutils">
<colgroup>
<col width="21%" />
<col width="79%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Configuration item</th>
<th class="head">description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>NS_HOST</td>
<td>the hostname or ip address of the name server</td>
</tr>
<tr class="row-odd"><td>NS_PORT</td>
<td>the port number of the name server</td>
</tr>
<tr class="row-even"><td>NS_BCHOST</td>
<td>the hostname or ip address of the name server&#8217;s broadcast responder</td>
</tr>
<tr class="row-odd"><td>NS_BCPORT</td>
<td>the port number of the name server&#8217;s broadcast responder</td>
</tr>
<tr class="row-even"><td>NATHOST</td>
<td>the external hostname in case of NAT</td>
</tr>
<tr class="row-odd"><td>NATPORT</td>
<td>the external port in case of NAT</td>
</tr>
</tbody>
</table>
</div>
<div class="section" id="name-server-control-tool">
<span id="nameserver-nsc"></span><h2>Name server control tool<a class="headerlink" href="#name-server-control-tool" title="Permalink to this headline">¶</a></h2>
<p>The name server control tool (or &#8216;nsc&#8217;) is used to talk to a running name server and perform
diagnostic or maintenance actions such as querying the registered objects, adding or removing
a name registration manually, etc.</p>
<p>synopsis: <strong class="command">python -m Pyro4.nsc [options] command [arguments]</strong></p>
<dl class="option">
<dt id="cmdoption-Pyro4.nsc-h">
<tt class="descname">-h</tt><tt class="descclassname"></tt><tt class="descclassname">, </tt><tt class="descname">--help</tt><tt class="descclassname"></tt><a class="headerlink" href="#cmdoption-Pyro4.nsc-h" title="Permalink to this definition">¶</a></dt>
<dd><p>Print a short help message and exit.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.nsc-n">
<tt class="descname">-n</tt><tt class="descclassname"> HOST</tt><tt class="descclassname">, </tt><tt class="descname">--host</tt><tt class="descclassname">=HOST</tt><a class="headerlink" href="#cmdoption-Pyro4.nsc-n" title="Permalink to this definition">¶</a></dt>
<dd><p>Provide the hostname or ip address of the name server.
The default is to do a broadcast lookup to search for a name server.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.nsc-p">
<tt class="descname">-p</tt><tt class="descclassname"> PORT</tt><tt class="descclassname">, </tt><tt class="descname">--port</tt><tt class="descclassname">=PORT</tt><a class="headerlink" href="#cmdoption-Pyro4.nsc-p" title="Permalink to this definition">¶</a></dt>
<dd><p>Provide the port of the name server, or its broadcast port if you&#8217;re doing a broadcast lookup.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.nsc-u">
<tt class="descname">-u</tt><tt class="descclassname"> UNIXSOCKET</tt><tt class="descclassname">, </tt><tt class="descname">--unixsocket</tt><tt class="descclassname">=UNIXSOCKET</tt><a class="headerlink" href="#cmdoption-Pyro4.nsc-u" title="Permalink to this definition">¶</a></dt>
<dd><p>Provide the Unix domain socket name of the name server, rather than a normal TCP/IP socket.</p>
</dd></dl>

<dl class="option">
<dt id="cmdoption-Pyro4.nsc-v">
<tt class="descname">-v</tt><tt class="descclassname"></tt><tt class="descclassname">, </tt><tt class="descname">--verbose</tt><tt class="descclassname"></tt><a class="headerlink" href="#cmdoption-Pyro4.nsc-v" title="Permalink to this definition">¶</a></dt>
<dd><p>Print more output that could be useful.</p>
</dd></dl>

<p>The available commands for this tool are:</p>
<dl class="docutils">
<dt>list <span class="classifier-delimiter">:</span> <span class="classifier">list [prefix]</span></dt>
<dd>List all objects registered in the name server. If you supply a prefix,
the list will be filtered to show only the objects whose name starts with the prefix.</dd>
<dt>listmatching <span class="classifier-delimiter">:</span> <span class="classifier">listmatching pattern</span></dt>
<dd>List only the objects with a name matching the given regular expression pattern.</dd>
<dt>register <span class="classifier-delimiter">:</span> <span class="classifier">register name uri</span></dt>
<dd>Registers a name to the given Pyro object <abbr title="universal resource identifier">URI</abbr>.</dd>
<dt>remove <span class="classifier-delimiter">:</span> <span class="classifier">remove name</span></dt>
<dd>Removes the entry with the exact given name from the name server.</dd>
<dt>removematching <span class="classifier-delimiter">:</span> <span class="classifier">removematching pattern</span></dt>
<dd>Removes all entries matching the given regular expression pattern.</dd>
<dt>ping</dt>
<dd>Does nothing besides checking if the name server is running and reachable.</dd>
</dl>
<p>Example:</p>
<div class="highlight-python"><pre>$ python -m Pyro4.nsc ping
Name server ping ok.

$ python -m Pyro4.nsc list Pyro
--------START LIST - prefix 'Pyro'
Pyro.NameServer --&gt; PYRO:Pyro.NameServer@localhost:9090
--------END LIST - prefix 'Pyro'</pre>
</div>
</div>
<div class="section" id="locating-the-name-server-and-using-it-in-your-code">
<h2>Locating the Name Server and using it in your code<a class="headerlink" href="#locating-the-name-server-and-using-it-in-your-code" title="Permalink to this headline">¶</a></h2>
<p>The name server is a Pyro object itself, and you access it through a normal Pyro proxy.
The object exposed is <a class="reference internal" href="api/naming.html#Pyro4.naming.NameServer" title="Pyro4.naming.NameServer"><tt class="xref py py-class docutils literal"><span class="pre">Pyro4.naming.NameServer</span></tt></a>.
Getting a proxy for the name server is done using the following function:
<a class="reference internal" href="api/naming.html#Pyro4.naming.locateNS" title="Pyro4.naming.locateNS"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.naming.locateNS()</span></tt></a> (also available as <a class="reference internal" href="api/main.html#Pyro4.locateNS" title="Pyro4.locateNS"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.locateNS()</span></tt></a>).</p>
<p>By far the easiest way to locate the Pyro name server is by using the broadcast lookup mechanism.
This goes like this: you simply ask Pyro to look up the name server and return a proxy for it.
It automatically figures out where in your subnet it is running by doing a broadcast and returning
the first Pyro name server that responds.</p>
<p>There is a config item <tt class="docutils literal"><span class="pre">BROADCAST_ADDRS</span></tt> that contains a comma separated list of the broadcast
addresses Pyro should use when doing a broadcast lookup. Depending on your network configuration,
you may have to change this list to make the lookup work. It could be that you have to add the
network broadcast address for the specific network that the name server is located on.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Broadcast lookup only works if you started a name server that didn&#8217;t bind on localhost.
For instance, the name server started as an example in <a class="reference internal" href="#nameserver-nameserver"><em>Starting the Name Server</em></a> was told to
bind on the host name &#8216;neptune&#8217; and it started a broadcast responder as well.
If you use the default host (localhost) no broadcast responder can be created.</p>
</div>
<p>Normally, all name server lookups are done this way. In code, it is simply calling the
locator function without any arguments.
If you want to circumvent the broadcast lookup (because you know the location of the
server already, somehow) you can specify the hostname.</p>
<dl class="function">
<dt id="locateNS">
<tt class="descname">locateNS</tt><big>(</big><span class="optional">[</span><em>host=None</em>, <em>port=None</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#locateNS" title="Permalink to this definition">¶</a></dt>
<dd><p>Get a proxy for a name server somewhere in the network.
If you&#8217;re not providing host or port arguments, the configured defaults are used.
Unless you specify a host, a broadcast lookup is done to search for a name server.
(api reference: <a class="reference internal" href="api/naming.html#Pyro4.naming.locateNS" title="Pyro4.naming.locateNS"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.naming.locateNS()</span></tt></a>)</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>host</strong> &#8211; the hostname or ip address where the name server is running.
Default is <tt class="docutils literal"><span class="pre">None</span></tt> which means it uses a network broadcast lookup.
If you specify a host, no broadcast lookup is performed.</li>
<li><strong>port</strong> &#8211; <p>the port number on which the name server is running.
Default is <tt class="docutils literal"><span class="pre">None</span></tt> which means use the configured default.
The exact meaning depends on whether the host parameter is given:</p>
<ul>
<li>host parameter given: the port now means the actual name server port.</li>
<li>host parameter not given: the port now means the broadcast port.</li>
</ul>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</dd></dl>

</div>
<div class="section" id="the-magical-pyroname-protocol-type">
<h2>The &#8216;magical&#8217; PYRONAME protocol type<a class="headerlink" href="#the-magical-pyroname-protocol-type" title="Permalink to this headline">¶</a></h2>
<p>To create a proxy and connect to a Pyro object, Pyro needs an URI so it can find the object.
Because it is so convenient, the name server logic has been integrated into Pyro&#8217;s URI mechanism
by means of the special <tt class="docutils literal"><span class="pre">PYRONAME</span></tt> protocol type (rather than the normal <tt class="docutils literal"><span class="pre">PYRO</span></tt> protocol type).
This protocol type tells Pyro to treat the URI as a logical object name instead, and Pyro will
do a name server lookup automatically to get the actual object&#8217;s URI. The form of a PYRONAME uri
is very simple: <tt class="docutils literal"><span class="pre">PYRONAME:some_logical_object_name</span></tt>, where
&#8220;some_logical_object_name&#8221; is the name of a registered Pyro object in the name server.
This means that instead of manually resolving objects like this:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">nameserver</span><span class="o">=</span><span class="n">Pyro4</span><span class="o">.</span><span class="n">locateNS</span><span class="p">()</span>
<span class="n">uri</span><span class="o">=</span><span class="n">nameserver</span><span class="o">.</span><span class="n">lookup</span><span class="p">(</span><span class="s">&quot;Department.BackupServer&quot;</span><span class="p">)</span>
<span class="n">proxy</span><span class="o">=</span><span class="n">Pyro4</span><span class="o">.</span><span class="n">Proxy</span><span class="p">(</span><span class="n">uri</span><span class="p">)</span>
<span class="n">proxy</span><span class="o">.</span><span class="n">backup</span><span class="p">()</span>
</pre></div>
</div>
<p>you can write this instead:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">proxy</span><span class="o">=</span><span class="n">Pyro4</span><span class="o">.</span><span class="n">Proxy</span><span class="p">(</span><span class="s">&quot;PYRONAME:Department.BackupServer&quot;</span><span class="p">)</span>
<span class="n">proxy</span><span class="o">.</span><span class="n">backup</span><span class="p">()</span>
</pre></div>
</div>
<p>An additional benefit of using a PYRONAME uri in a proxy is that the proxy isn&#8217;t strictly
tied to a specific object on a specific location. This is useful in scenarios where the server
objects might move to another location, for instance when a disconnect/reconnect occurs.
See the <tt class="file docutils literal"><span class="pre">autoreconnect</span></tt> example for more details about this.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Pyro has to do a lookup every time it needs to connect one of these PYRONAME uris.
If you connect/disconnect many times or with many different objects,
consider using PYRO uris (you can type them directly or create them by resolving as explained in the
following paragraph) or call <a class="reference internal" href="api/core.html#Pyro4.core.Proxy._pyroBind" title="Pyro4.core.Proxy._pyroBind"><tt class="xref py py-meth docutils literal"><span class="pre">Pyro4.core.Proxy._pyroBind()</span></tt></a> on the proxy to
bind it to a fixed PYRO uri instead.</p>
</div>
</div>
<div class="section" id="resolving-object-names">
<h2>Resolving object names<a class="headerlink" href="#resolving-object-names" title="Permalink to this headline">¶</a></h2>
<p>&#8216;Resolving an object name&#8217; means to look it up in the name server&#8217;s registry and getting
the actual URI that belongs to it (with the actual object name or id and the location of
the daemon in which it is running). This is not normally needed in user code (Pyro takes
care of it automatically for you), but it can still be useful in certain situations.</p>
<p>Resolving a logical name is usually done by getting a name server proxy and using the <tt class="docutils literal"><span class="pre">lookup</span></tt> method.
This returns the URI object. You can also resolve a <tt class="docutils literal"><span class="pre">PYRONAME</span></tt> URI using the following utility function:
<a class="reference internal" href="api/naming.html#Pyro4.naming.resolve" title="Pyro4.naming.resolve"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.naming.resolve()</span></tt></a> (also available as <a class="reference internal" href="api/main.html#Pyro4.resolve" title="Pyro4.resolve"><tt class="xref py py-func docutils literal"><span class="pre">Pyro4.resolve()</span></tt></a>), which goes like this:</p>
<dl class="function">
<dt id="resolve">
<tt class="descname">resolve</tt><big>(</big><em>uri</em><big>)</big><a class="headerlink" href="#resolve" title="Permalink to this definition">¶</a></dt>
<dd><p>Finds a name server, and use that to resolve a PYRONAME uri into the direct PYRO uri pointing to the named object.
If uri is already a PYRO uri, it is returned unmodified.
<em>Note:</em> if you need to resolve more than a few names, consider using the name server directly instead of
repeatedly calling this function, to avoid the name server lookup overhead from each call.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>uri</strong> (string or <a class="reference internal" href="api/core.html#Pyro4.core.URI" title="Pyro4.core.URI"><tt class="xref py py-class docutils literal"><span class="pre">Pyro4.core.URI</span></tt></a>) &#8211; PYRONAME uri that you want to resolve</td>
</tr>
</tbody>
</table>
</dd></dl>

</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <p class="logo"><a href="index.html">
              <img class="logo" src="_static/pyro.png" alt="Logo"/>
            </a></p>
  <h3><a href="index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Name Server</a><ul>
<li><a class="reference internal" href="#starting-the-name-server">Starting the Name Server</a></li>
<li><a class="reference internal" href="#configuration-items">Configuration items</a></li>
<li><a class="reference internal" href="#name-server-control-tool">Name server control tool</a></li>
<li><a class="reference internal" href="#locating-the-name-server-and-using-it-in-your-code">Locating the Name Server and using it in your code</a></li>
<li><a class="reference internal" href="#the-magical-pyroname-protocol-type">The &#8216;magical&#8217; PYRONAME protocol type</a></li>
<li><a class="reference internal" href="#resolving-object-names">Resolving object names</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="servercode.html"
                        title="previous chapter">Servers: publishing objects</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="security.html"
                        title="next chapter">Security</a></p>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="security.html" title="Security"
             >next</a> |</li>
        <li class="right" >
          <a href="servercode.html" title="Servers: publishing objects"
             >previous</a> |</li>
        <li><a href="index.html">Pyro 4.21 documentation</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright Irmen de Jong.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
  </body>
</html>