Hello,<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
i&#39;m currently writing a library for making remote procedure calls to<br>
C++ objects. <br>
</blockquote><div> <br>FYI, last year Stjepan spent quite some time on a rpc library, have you had a chance to look of it? (<a href="https://svn.boost.org/trac/boost/browser/sandbox/rpc">https://svn.boost.org/trac/boost/browser/sandbox/rpc</a>). I remember he implemented asynchronous calls and use futures&lt;&gt; to implement synchronous calls. If you search last year&#39;s email, you may find good discussions about this rpc lib.<br>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
I&#39;ll have a closer look on what can be merged with &quot;channels&quot; from the<br>
boost vault[1], but from the first look it seems that &quot;channels&quot;<br>
targets a much more general approach. After the first tries, i<br>
realized, that my implemention has to be very specific (e.g. templates<br>
only where necessary). So, the design approaches might be too<br>
different.<br>
</blockquote><div> </div></div>Yes, the Channel lib i am working on has a quite different target. It intends to define / provide the basic primitives for message passing (various name-spaces and dispatchers), and a template framework to compose these primitives and create customized message passing systems for specific applications. And the resulted messaging systems should be quite simple.<br>
<br>Channel generated messaging systems are peer-peer systems, not like the client-server model of RPC. When 2 remote channels connect, the ids / names in these 2 channels are exchanged automatically thru Channel&#39;s protocol, so threads / objects connected with these channels can do messaging with remote peers transparently.<br>
<br>Another big difference is the use of &quot;names&quot; / &quot;ids&quot;. In normal rpc systems (or rpc based systems such as Corba), the only purpose of object names/urls or name-server is for &quot;boot-strapping&quot; - obtaining the inital reference to remote server object, after that, names/urls has no use. In RPC systems, the interface of components are the remote methods exposed by server objects (defined in IDL). <br>
In Channel, &quot;names/ids&quot; and name-spaces provide the major design scheme / framework for distributed systems. The interface of a component in distributed systems are what &quot;ids&quot; it publish and what &quot;ids&quot; it subscrib to, its physical location doesn&#39;t matter much. A component running inside a process &quot;A&quot;, attached to a channel and pub/sub some ids, can easily be moved to another process &quot;B&quot; in a different machine, as long as &quot;B&quot; has a channel which connect to &quot;A&quot;&#39;s channel. The component will function as normal as it was in process &quot;A&quot;.<br>
<br>RPC is a really important in many domains, although i talked mostly about Channel above. Please keep up your good work!<br><br>Regards<br>Yigong<br>

