@@ -0,0 +1,45 @@
1+-- | Like Throughput, but send every ping from a different process
2+-- (i.e., require a lightweight connection per ping)
3+import System.Environment
5+import Control.Applicative
6+import Control.Distributed.Process
7+import Control.Distributed.Process.Node
8+import Network.Transport.TCP (createTransport, defaultTCPParameters)
9+import Data.Binary (encode, decode)
10+import qualified Data.ByteString.Lazy as BSL
15+ go :: Int -> Process ()
19+ Nothing -> go (n + 1)
20+ Just them -> send them n >> go 0
22+count :: Int -> ProcessId -> Process ()
25+ replicateM_ n . spawnLocal $ send them (Nothing :: Maybe ProcessId)
28+ liftIO $ print (n == n')
30+initialProcess :: String -> Process ()
31+initialProcess "SERVER" = do
33+ liftIO $ BSL.writeFile "counter.pid" (encode us)
35+initialProcess "CLIENT" = do
36+ n <- liftIO $ getLine
37+ them <- liftIO $ decode <$> BSL.readFile "counter.pid"
42+ [role, host, port] <- getArgs
43+ Right transport <- createTransport host port defaultTCPParameters
44+ node <- newLocalNode transport initRemoteTable
45+ runProcess node $ initialProcess role