diff options
-rw-r--r-- | bench/Main.hs | 45 | ||||
-rw-r--r-- | bench/Server.hs | 13 | ||||
-rw-r--r-- | krpc.cabal | 37 | ||||
-rw-r--r-- | src/Network/KRPC.hs | 4 |
4 files changed, 37 insertions, 62 deletions
diff --git a/bench/Main.hs b/bench/Main.hs index 024d4d93..97f97425 100644 --- a/bench/Main.hs +++ b/bench/Main.hs | |||
@@ -1,33 +1,32 @@ | |||
1 | {-# LANGUAGE OverloadedStrings #-} | 1 | {-# LANGUAGE OverloadedStrings #-} |
2 | {-# LANGUAGE MultiParamTypeClasses #-} | ||
3 | {-# OPTIONS_GHC -fno-warn-orphans #-} | ||
2 | module Main (main) where | 4 | module Main (main) where |
3 | |||
4 | import Control.Monad | 5 | import Control.Monad |
5 | import Data.ByteString (ByteString) | 6 | import Control.Monad.Reader |
6 | import qualified Data.ByteString as B | ||
7 | import Criterion.Main | 7 | import Criterion.Main |
8 | import Data.ByteString as BS | ||
8 | import Network.KRPC | 9 | import Network.KRPC |
9 | import Network.Socket | ||
10 | 10 | ||
11 | instance KRPC ByteString ByteString where | ||
12 | method = "echo" | ||
11 | 13 | ||
12 | addr :: RemoteAddr | 14 | echo :: Handler IO |
13 | addr = SockAddrInet 6000 0 | 15 | echo = handler $ \ _ bs -> return (bs :: ByteString) |
14 | 16 | ||
15 | echo :: Method ByteString ByteString | 17 | addr :: SockAddr |
16 | echo = method "echo" ["x"] ["x"] | 18 | addr = SockAddrInet 6000 (256 * 256 * 256 + 127) |
17 | 19 | ||
18 | main :: IO () | 20 | main :: IO () |
19 | main = withRemote $ \remote -> do { | 21 | main = withManager addr [echo] $ \ m -> (`runReaderT` m) $ do |
20 | ; let sizes = [10, 100, 1000, 10000, 16 * 1024] | 22 | listen |
21 | ; let repetitions = [1, 10, 100, 1000] | 23 | liftIO $ defaultMain (benchmarks m) |
22 | ; let params = [(r, s) | r <- repetitions, s <- sizes] | ||
23 | ; let benchmarks = map (uncurry (mkbench_ remote)) params | ||
24 | ; defaultMain benchmarks | ||
25 | } | ||
26 | where | 24 | where |
27 | mkbench_ re r n = bench (show r ++ "/" ++ show n) $ nfIO $ | 25 | sizes = [10, 100, 1000, 10000, 16 * 1024] |
28 | replicateM r $ call_ re addr echo (B.replicate n 0) | 26 | repetitions = [1, 10, 100, 1000] |
29 | 27 | benchmarks m = [mkbench m r s | r <- repetitions, s <- sizes] | |
30 | {- | 28 | where |
31 | forM_ [1..] $ const $ do | 29 | mkbench m r n = |
32 | async addr myconcat (replicate 100 [1..10]) | 30 | bench (show r ++ "times" ++ "/" ++ show n ++ "bytes") $ nfIO $ |
33 | -} | 31 | replicateM r $ |
32 | runReaderT (query addr (BS.replicate n 0)) m | ||
diff --git a/bench/Server.hs b/bench/Server.hs deleted file mode 100644 index ef20c08a..00000000 --- a/bench/Server.hs +++ /dev/null | |||
@@ -1,13 +0,0 @@ | |||
1 | {-# LANGUAGE OverloadedStrings #-} | ||
2 | module Main (main) where | ||
3 | |||
4 | import Data.ByteString (ByteString) | ||
5 | import Network.KRPC | ||
6 | import Network.Socket | ||
7 | |||
8 | |||
9 | echo :: Method ByteString ByteString | ||
10 | echo = method "echo" ["x"] ["x"] | ||
11 | |||
12 | main :: IO () | ||
13 | main = server (SockAddrInet 6000 0) [ echo ==> return ] | ||
@@ -43,7 +43,6 @@ library | |||
43 | Network.KRPC.Message | 43 | Network.KRPC.Message |
44 | Network.KRPC.Method | 44 | Network.KRPC.Method |
45 | Network.KRPC.Manager | 45 | Network.KRPC.Manager |
46 | |||
47 | build-depends: base == 4.* | 46 | build-depends: base == 4.* |
48 | , bytestring >= 0.10 | 47 | , bytestring >= 0.10 |
49 | , lifted-base >= 0.1.1 | 48 | , lifted-base >= 0.1.1 |
@@ -53,10 +52,8 @@ library | |||
53 | , bencoding >= 0.4.3 | 52 | , bencoding >= 0.4.3 |
54 | , network >= 2.3 | 53 | , network >= 2.3 |
55 | , containers | 54 | , containers |
56 | |||
57 | if impl(ghc < 7.6) | 55 | if impl(ghc < 7.6) |
58 | build-depends: ghc-prim | 56 | build-depends: ghc-prim |
59 | |||
60 | ghc-options: -Wall | 57 | ghc-options: -Wall |
61 | 58 | ||
62 | test-suite spec | 59 | test-suite spec |
@@ -71,32 +68,20 @@ test-suite spec | |||
71 | , bytestring | 68 | , bytestring |
72 | , network | 69 | , network |
73 | , mtl | 70 | , mtl |
74 | |||
75 | , hspec | 71 | , hspec |
76 | , QuickCheck | 72 | , QuickCheck |
77 | , quickcheck-instances | 73 | , quickcheck-instances |
78 | |||
79 | , bencoding | 74 | , bencoding |
80 | , krpc | 75 | , krpc |
81 | 76 | ||
82 | --executable bench-server | 77 | benchmark bench |
83 | -- default-language: Haskell2010 | 78 | type: exitcode-stdio-1.0 |
84 | -- hs-source-dirs: bench | 79 | default-language: Haskell2010 |
85 | -- main-is: Server.hs | 80 | hs-source-dirs: bench |
86 | -- build-depends: base == 4.* | 81 | main-is: Main.hs |
87 | -- , bytestring | 82 | build-depends: base == 4.* |
88 | -- , krpc | 83 | , bytestring |
89 | -- , network | 84 | , mtl |
90 | -- ghc-options: -fforce-recomp | 85 | , criterion |
91 | 86 | , krpc | |
92 | --benchmark bench-client | 87 | ghc-options: -O2 -fforce-recomp \ No newline at end of file |
93 | -- type: exitcode-stdio-1.0 | ||
94 | -- default-language: Haskell2010 | ||
95 | -- hs-source-dirs: bench | ||
96 | -- main-is: Main.hs | ||
97 | -- build-depends: base == 4.* | ||
98 | -- , bytestring | ||
99 | -- , criterion | ||
100 | -- , krpc | ||
101 | -- , network | ||
102 | -- ghc-options: -O2 -fforce-recomp \ No newline at end of file | ||
diff --git a/src/Network/KRPC.hs b/src/Network/KRPC.hs index 10d2eb55..286c063e 100644 --- a/src/Network/KRPC.hs +++ b/src/Network/KRPC.hs | |||
@@ -107,8 +107,12 @@ module Network.KRPC | |||
107 | -- * Exceptions | 107 | -- * Exceptions |
108 | , KError (..) | 108 | , KError (..) |
109 | , ErrorCode (..) | 109 | , ErrorCode (..) |
110 | |||
111 | -- * Re-export | ||
112 | , SockAddr (..) | ||
110 | ) where | 113 | ) where |
111 | 114 | ||
112 | import Network.KRPC.Message | 115 | import Network.KRPC.Message |
113 | import Network.KRPC.Method | 116 | import Network.KRPC.Method |
114 | import Network.KRPC.Manager | 117 | import Network.KRPC.Manager |
118 | import Network.Socket (SockAddr (..)) \ No newline at end of file | ||