Haskell Distributed Project
This repository holds an implementation of Cloud Haskell based on the work of Jeff Epstein, Andrew Black, and Simon Peyton-Jones.
At present, this repository hosts two packages:
For more detailed information about the interfaces provided by these packages, please refer to the distributed-process repository wiki.
Examples of the transport layer at work can be found in the
DemoTransport.hs file contains a number of different functions named
demo#. These functions demonstrate the use of the
To try them out, launch
ghci, including the appropriate sources:
ghci -idistributed-process/src -inetwork-transport/src examples/DemoTransport.hs
The first demo,
demo0 yields the following output when run with the TCP transport:
*DemoTransport> tcp >>= demo0 logServer: [Chunk "hello 1" Empty] logServer: [Chunk "hello 2" Empty] logServer: [Chunk "hello 3" Empty] logServer: [Chunk "hello 4" Empty] logServer: [Chunk "hello 5" Empty] logServer: [Chunk "hello 6" Empty] logServer: [Chunk "hello 7" Empty] logServer: [Chunk "hello 8" Empty] logServer: [Chunk "hello 9" Empty] logServer: [Chunk "hello 10" Empty]
See the source code for more details.
DemoProcess.hs file shows a very basic example of how to use the
Control.Distributed.Process module in conjunction with
This is demonstrated using the
ghci -idistributed-process/src -inetwork-transport/src examples/DemoProcess.hs
The output of the example is as follows:
*DemoProcess> demo1 "Starting node" "Starting process" 1: jim1 says: hi there 2: bob1 says: hi there 3: jim1 says: bye 4: bob1 says: bye
DemoTCP.hs file demonstrates how a master can be connected to slaves
using the transport layer over TCP.
This example should be compiled in the usual fashion:
ghc --make -idistributed-process/src -inetwork-transport/src examples/DemoTCP.hs
After compiling, the following will initialize a new master that waits for two clients to connect on the local machine:
./examples/DemoTCP 127.0.0.1 8080 sourceAddrFile 2
Following this, two slaves should be created that will connect to the master:
./examples/DemoTCP 127.0.0.1 8081 sourceAddrFile ./examples/DemoTCP 127.0.0.1 8082 sourceAddrFile
Once the connection is established, the slaves will provide the master
SourceAddr. The master then decodes this, and sends a message
back. After processing this message, the slaves respond to the master,
which then outputs some data.
Transport.TCP backend uses
Network.ByteString.Lazy as its underlying
protocol, so we produce a benchmark that compares it directly with this.
Data.Binary package is used for converting values
ByteStrings for transmission.
The benchmarking is performed on the client side using criterion: the server must be set up before benching is performed.
This benchmark measures how quickly a sequence of ping/pong messages are sent between a server and client. Full details can be found in:
This benchmark measures how quickly a number of bytes can be sent from a client to a server. Full details can be found in the following files: