PageRenderTime 42ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/Haskell/taskwork.hs

http://github.com/imatix/zguide
Haskell | 35 lines | 20 code | 6 blank | 9 comment | 0 complexity | c3150402e6e5d8132f284c9867139ac5 MD5 | raw file
Possible License(s): BSD-3-Clause
  1. {-# LANGUAGE OverloadedStrings #-}
  2. -- Task worker
  3. -- Connects PULL socket to tcp://localhost:5557
  4. -- Collects workloads from ventilator via that socket
  5. -- Connects PUSH socket to tcp://localhost:5558
  6. -- Sends results to sink via that socket
  7. module Main where
  8. import Control.Concurrent
  9. import Control.Monad
  10. import Data.Monoid
  11. import qualified Data.ByteString.Char8 as BS
  12. import System.IO
  13. import System.ZMQ4.Monadic
  14. main :: IO ()
  15. main = runZMQ $ do
  16. -- Socket to receive messages on
  17. receiver <- socket Pull
  18. connect receiver "tcp://localhost:5557"
  19. -- Socket to send messages to
  20. sender <- socket Push
  21. connect sender "tcp://localhost:5558"
  22. -- Process tasks forever
  23. forever $ do
  24. string <- receive receiver
  25. liftIO $ do
  26. BS.putStr (string <> ".")
  27. hFlush stdout
  28. threadDelay $ read (BS.unpack string) * 1000
  29. send sender [] ""