<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to nsob</title><link>https://sourceforge.net/p/nsdci/wiki/nsob/</link><description>Recent changes to nsob</description><atom:link href="https://sourceforge.net/p/nsdci/wiki/nsob/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 01 Apr 2015 22:46:59 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/nsdci/wiki/nsob/feed" rel="self" type="application/rss+xml"/><item><title>nsob modified by Anonymous</title><link>https://sourceforge.net/p/nsdci/wiki/nsob/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="networked-small-object-broker-nsob"&gt;Networked Small Object Broker (nsob)&lt;/h1&gt;
&lt;p&gt;nsdci/dcicommon/sob.c &lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The Networked Small Object Broker (nsob) is used to broker data between servers. You must set up a "nsob client" to send and request data, and a "nsob server" to broker data. The api is only exposed when properly configured. See the "Configuration" section for more information. &lt;/p&gt;
&lt;p&gt;Additional Reading: rpc, &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="tcl-api"&gt;TCL API&lt;/h2&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobput"&gt;nsob.put&lt;/h3&gt;
&lt;p&gt;Used to put data from a client to the server. If sendflush is enabled (default), a &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt; message will be sent to all clients. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.put &lt;/strong&gt; &lt;em&gt;server key value&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server&lt;/em&gt;&lt;br /&gt;
String. The name of the sob server. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;key&lt;/em&gt;&lt;br /&gt;
String. The file name or key of the data. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;value&lt;/em&gt;&lt;br /&gt;
String. The data to be put. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;br /&gt;
Success &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobappend"&gt;nsob.append&lt;/h3&gt;
&lt;p&gt;Used to append data on the server. If sendflush is enabled (default), a &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt; message will be sent to all clients. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.append&lt;/strong&gt; &lt;em&gt;server key value&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server&lt;/em&gt;&lt;br /&gt;
String. The name of the sob server. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;key&lt;/em&gt;&lt;br /&gt;
String. The file name or key of the data. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;value&lt;/em&gt;&lt;br /&gt;
String. The data to be appended. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;br /&gt;
Success &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobget"&gt;nsob.get&lt;/h3&gt;
&lt;p&gt;Used to fetch data from the server. If caching is enabled (default), the API will fetch from cache if exists, and make a cache entry if it does not. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.get&lt;/strong&gt; &lt;em&gt;server key&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server&lt;/em&gt;&lt;br /&gt;
String. The name of the sob server. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;key&lt;/em&gt;&lt;br /&gt;
String. The file name or key of the data. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;STRING&lt;/code&gt;&lt;br /&gt;
Success. The contents of the file. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;br /&gt;
Success. The communication was successful, but there was no such key. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobdelete"&gt;nsob.delete&lt;/h3&gt;
&lt;p&gt;Used to remove data from the server. If sendflush is enabled (default), a &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt; message will be sent to all clients. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.delete&lt;/strong&gt; &lt;em&gt;server key&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;server&lt;/em&gt;&lt;br /&gt;
String. The name of the sob server. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;key&lt;/em&gt;&lt;br /&gt;
String. The file name or key of the data. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;br /&gt;
Success. The file has been deleted. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobnames"&gt;nsob.names&lt;/h3&gt;
&lt;p&gt;Used to list the names of the configured sobs. Both clients and servers are listed. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.names&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;String&lt;/code&gt;&lt;br /&gt;
Success. The names of the configured sobs in TCL_LIST format. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobdebug"&gt;nsob.debug&lt;/h3&gt;
&lt;p&gt;Used to toggle debug mode. Debug mode adds log messages for many nsob commands. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.debug&lt;/strong&gt; &lt;em&gt;?boolean?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;?boolean?&lt;/em&gt;&lt;br /&gt;
Boolean. Optional. Specifies whether or not debugging is enabled. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;1&lt;/code&gt;&lt;br /&gt;
Success. Returned if a boolean was specified. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;BOOLEAN&lt;/code&gt;&lt;br /&gt;
Success. If a boolean was not specified, then the current debug value is returned. &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;--------------------------------------------------------------------------------&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id="nsobcopy"&gt;nsob.copy&lt;/h3&gt;
&lt;p&gt;Used to copy the contents of a local file to the borker. If sendflush is enabled (default), a &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt; message will be sent to all clients. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;nsob.copy&lt;/strong&gt; &lt;em&gt;localFile server key&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Argument&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;localFile&lt;/em&gt;&lt;br /&gt;
String. The complete file path to the file. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;server&lt;/em&gt;&lt;br /&gt;
String. The name of the sob server. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;key&lt;/em&gt;&lt;br /&gt;
String. The file name or key of the data. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;NULL&lt;/code&gt;&lt;br /&gt;
Success. The file was copied to the server. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;TCL_ERROR&lt;/code&gt;&lt;br /&gt;
Failure. An error occurred. See the server log for more information. &lt;/p&gt;
&lt;h2 id="configuration"&gt;Configuration&lt;/h2&gt;
&lt;p&gt;The bundled configuration has a single AOLserver instance configured with more than one nsob server. You could easily break out each nsob server to its own AOLserver instance. Below is a simple configuration that creates a nsob server called "sob". &lt;/p&gt;
&lt;h4 id="server"&gt;Server:&lt;/h4&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/modules"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;nssock&lt;/span&gt; &lt;span class="n"&gt;nssock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;dci&lt;/span&gt; &lt;span class="n"&gt;dci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/nssock"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;hostname&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;hostName&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;httpPort&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/rpc/server/nsobc:sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/rpc/server/nsobc:sob/acl"&lt;/span&gt;
        &lt;span class="n"&gt;ns_paran&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt; &lt;span class="mf"&gt;127.0.0.1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob/servers"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob/server/sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;sobRoot&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;mkdirs&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;rename&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;statsdetail&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob/server/sob/clients"&lt;/span&gt;
        &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt; &lt;span class="n"&gt;has&lt;/span&gt; &lt;span class="n"&gt;no&lt;/span&gt; &lt;span class="n"&gt;params&lt;/span&gt; &lt;span class="n"&gt;but&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
        &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Legacy&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="n"&gt;list&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="n"&gt;HTTP&lt;/span&gt; &lt;span class="n"&gt;RPC&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
        &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;See&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;rpc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="n"&gt;acl&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt; &lt;span class="n"&gt;above&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id="client"&gt;Client:&lt;/h4&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/modules"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;dci&lt;/span&gt; &lt;span class="n"&gt;dci&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;so&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/rpc"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;rpcPort&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/rpc/client/nsobc:sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;sobHostAddress&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;sobHostHttpPort&lt;/span&gt; 
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;httpkeepalive&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;httpnumconnections&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;debug&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob/clients"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;

    &lt;span class="n"&gt;ns_section&lt;/span&gt; &lt;span class="s"&gt;"ns/server/$server/module/dci/sob/client/sob"&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="n"&gt;ns_param&lt;/span&gt; &lt;span class="n"&gt;flushOnWrite&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Default&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;See&lt;/span&gt; &lt;span class="n"&gt;Best&lt;/span&gt; &lt;span class="n"&gt;Practices&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;p&gt;Any client can "put" data on the server. Use the tool server's &lt;a class="" href="http://code.google.com/p/aolserver/wiki/nscp" rel="nofollow"&gt;Control Port&lt;/a&gt; to send some data to the sob server (See &lt;a class="" href="/p/nsdci/wiki/Topology"&gt;Topology&lt;/a&gt; for more information): &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nl"&gt;tool:&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nsob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;put&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;mySobFile&lt;/span&gt; &lt;span class="s"&gt;"my sob data"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Any client can "get" data from the server. Use the frontend's &lt;a class="" href="http://code.google.com/p/aolserver/wiki/nscp" rel="nofollow"&gt;Control Port&lt;/a&gt; to request data from the sob server (See &lt;a class="" href="/p/nsdci/wiki/Topology"&gt;Topology&lt;/a&gt; for more information): &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nl"&gt;frontend:&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;nsob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;mySobFile&lt;/span&gt;
    &lt;span class="n"&gt;my&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="caching-and-network-cache-flush"&gt;Caching and Network Cache Flush&lt;/h2&gt;
&lt;p&gt;To optimize performance, nsob has the ability to cache at both the server and client. With caching enabled (default), the initial client request first looks into its own cache. If no entry is found it will make a call to the server. If the server has caching enabled (default), it will first look in its cache. If no entry is found, it will read from disk, make a cache entry, and return the data. The client API will make a cache entry and return the data. &lt;/p&gt;
&lt;p&gt;Network Cache Flush (&lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt;) is another service availble in nsdci. With the sobs configured to send cache flush messages (default), the remote client cache will be flushed when a sob entry is addded or changed. Note: You must configure &lt;a class="" href="/p/nsdci/wiki/ncf"&gt;ncf&lt;/a&gt; on the AOLserver instance hosting the nsob server in order to send cache flush messages. &lt;/p&gt;
&lt;p&gt;There are significant performance gains from caching. Consider a fetch to "file.xml" which is 8KB: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="nl"&gt;tool:&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nsob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="mi"&gt;555&lt;/span&gt; &lt;span class="n"&gt;microseconds&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;iteration&lt;/span&gt;

    &lt;span class="nl"&gt;tool:&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;nsob&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
    &lt;span class="mf"&gt;79.08&lt;/span&gt; &lt;span class="n"&gt;microseconds&lt;/span&gt; &lt;span class="n"&gt;per&lt;/span&gt; &lt;span class="n"&gt;iteration&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If dubugging is turned on, you will see the following log entries in the tool.server.log file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;Notice&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt;
    &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;nscp&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;Notice&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sob&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;get&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;ok&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first entry shows that the data was fetched from the server, the second shows the data was retrieved from cache. Similar notices can be seen on the server in the sob.server.log file: &lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;    &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;Notice&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt;
    &lt;span class="p"&gt;...[&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;conn&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;Notice&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xml&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cached&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="best-practices"&gt;Best Practices&lt;/h2&gt;
&lt;p&gt;Caching should be used where possible to optimize performance. The AOLserver Stats interface has insight to cache hit-rate information and should be used to measure the performance of the nsob cache. A high cache hit-rate is preferred. &lt;/p&gt;
&lt;p&gt;You might find that flowing content one way per server gives better performance. For example, one server brokering data from the tool server to the frontend, and a second from the frontend to the tool server. This could perform better than one nsob server doing both. &lt;/p&gt;
&lt;p&gt;When debugging, always check logs on both the client and server. If &lt;strong&gt;nsob.put&lt;/strong&gt; fails, there might be insight in the sob server's server log. &lt;/p&gt;
&lt;p&gt;When writing from a client that receives ncf messages, you should turn off the flushOnWrite param in the client config. This will cause the client to write to the server without removing its cache entry allowing the ncf message to remove it instead. Useful if the server is set up to send ncf messages. &lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Anonymous</dc:creator><pubDate>Wed, 01 Apr 2015 22:46:59 -0000</pubDate><guid>https://sourceforge.net4e87c525d3cd638ff96343d191f92565f90fcdf6</guid></item></channel></rss>