Virtual Circuits

In order to allow a reasonably transparent message transport across a communication link the concept of a virtual circuit is used. In our scheme a virtual circuit is comprised of a collection of processes which include 3 distinct types:

If we take our simple example of a Sender and Receiver and extend it so that the Sender process is running on a local box and the Receiver process is on a remote box. Lets assume that the two boxes are connected in some manner (say with a dialup modem). In order for our two processes to exchange messages the messages need to be encapsulated and transported between the boxes over the communications link. Because we are talking about a blocking send synchronization scheme the reply message would have to reverse the process and be transported back to the sender.

One elegant way to accomplish this is to arrange for a pseudo task to reside on each box representing the partner on the other box. On the Sender's box we would have a pseudo Receiver (called a relay) and on the Receiver's box we would have a pseudo Sender (called an agent). In this manner our original code would run unchanged. ie. the Sender would not be able to distinguish between the real Receiver and the pseudo Receiver and visa versa.

We still need a process to manage the actual transmission of the bytes over the communications link (called a talker).

Of these three virtual circuit components the relay and the agent can be absolutely generic and protocol independent. The talker processes can be highly reusable but by definition will contain code which is specific to the communications link in question.

The original download source contained some templates for these three virtual circuit components and the use of those was described in detail in the $FC_HOME/docs/ file.

We would like to see this work extended to at least the following communication mediums:

In order to seed this work we have created the directory tree and Makefile structures and duplicated the template fcTalker code into 2 areas:

This seed code is available for download. We are looking for assistance in getting both of these versions modified to suit their respective communication mediums.


A different tact was taken by the contributor of the network wide name locator (included with SIMPL1.2). We liked it so much that we have incorporated his effort into the main tree. We believe there is room to merge his effort into this more general scheme described above. Meanwhile his method provides a great deal of functionality by enabling "senders" to establish transparent communication paths to remote "receivers".

back to SIMPL main page

This project is being coordinated by FC software Inc.