在Haskell中通过网络发送10GB向量的最佳方法

时间:2014-04-29 08:34:09

标签: haskell

我很想知道在Haskell中通过网络发送10 GB的最佳方法是什么?我不想将其作为二进制发送而无需编写解码/编码器。保持严格或懒惰是最好的吗?

1 个答案:

答案 0 :(得分:10)

您也可以使用管道。 zlib压缩网络示例可以是:

module Main where
--------------------------------------------------------------------------------
import Pipes
import qualified Pipes.Prelude as P
import Pipes.Network.TCP
import Data.ByteString
import Pipes.ByteString as PB
import System.Environment
import Pipes.Zlib
--------------------------------------------------------------------------------

myReceive :: (MonadIO m) => m ()
myReceive = serve (Host "127.0.0.1") "8000" $ \(sock, remote) -> do
  Prelude.putStrLn $ "TCP connection established from " ++ show remote
  runEffect $ decompress defaultWindowBits (fromSocket sock 4096) >-> PB.stdout

mySend :: IO ()
mySend = connect "127.0.0.1" "8000" $ \(sock, remote) -> do
  Prelude.putStrLn $ "Connection established to " ++ show remote
  runEffect $ compress bestCompression defaultWindowBits (PB.stdin) >-> toSocket sock

main = do
  a:[] <- getArgs
  case a of
    "send"    -> mySend
    "receive" -> myReceive
    _ -> Prelude.putStrLn "Usage: netsend <send|receive>"