@@ -0,0 +1,39 @@
1+-- | Like Latency, but creating lots of channels
2+import System.Environment
4+import Control.Applicative
5+import Control.Distributed.Process
6+import Control.Distributed.Process.Node
7+import Network.Transport.TCP (createTransport, defaultTCPParameters)
8+import Data.Binary (encode, decode)
9+import qualified Data.ByteString.Lazy as BSL
11+pingServer :: Process ()
12+pingServer = forever $ do
16+pingClient :: Int -> ProcessId -> Process ()
17+pingClient n them = do
19+ (sc, rc) <- newChan :: Process (SendPort (), ReceivePort ())
22+ liftIO . putStrLn $ "Did " ++ show n ++ " pings"
24+initialProcess :: String -> Process ()
25+initialProcess "SERVER" = do
27+ liftIO $ BSL.writeFile "pingServer.pid" (encode us)
29+initialProcess "CLIENT" = do
30+ n <- liftIO $ getLine
31+ them <- liftIO $ decode <$> BSL.readFile "pingServer.pid"
32+ pingClient (read n) them
36+ [role, host, port] <- getArgs
37+ Right transport <- createTransport host port defaultTCPParameters
38+ node <- newLocalNode transport initRemoteTable
39+ runProcess node $ initialProcess role