message passing

Message passing refers to the messages that information systems pass among themselves in a concurrent system, achieving thereby some kind of distributed computation. Message passing systems use some form of inter-process communication provided by the platform.

Further Reading

Architectural Styles and the Design of Network-based Software Architectures , Roy Thomas Fielding, 2000
A great overview of approaches to software design based on message passing. It proposes REST as another approach.

Description

In message-passing systems, one system makes a request, and another provides a response. The requestor is called the client, and the responder is called theer server. These roles exists even in peer-to-peer systems, where the participants take on one role or the other for the duration of the conversation.

Tools

irc
vkvalli: A simple chat server and chat client library can be used for message passing . There are quite a few chat server and client implementations in this wiki. It seems to be suitable candidate for simple coordination among processes with messages. But generally people miss it when they look for IPC mechanisms.
A Thread-Safe Message Queue
Spread
Provides a high-performance messaging service that is resilient to faults across external or internal networks.

Applications

RPC
Conversations dressed up as procedures.
remote interpreter
In the Tcl world, communicating with remote interpreters is a particularly effective and satisfying activity.

Example: File Signaling Between Two Processes

RS: A simple file signalling between two processes, that both have write access to the same directory (but could run on different boxes and OSes, like Unix and WinNT), can look like this:

proc fsignal {cmd name {msg {}}} {
    switch $cmd {
        send {
            set fp [open $name.sig w]
            if {[string length $msg]} {puts $fp $msg}
            close $fp
        }
        wait {
           while 1 {
               if {[file exists $name.sig]} {
                   set fp [open $name.sig]
                   set msg [read $fp]
                   close $fp
                   file delete $name.sig
                   break
               } else {after 100}
           }
        }
    }
    set msg ;# return the message from sender in both cases
}
# process 1: (when conditions are ripe)
fsignal send Go 42

# process 2: (before the real action)
set Magic [fsignal wait Go]

See also filewait for a related scriptlet.