mine sockets lib vs yesod

Let’s compare: 1000 parallel connections 100k requests yesod : 7658 recs/sec Errors 85808 Timeouted 0 Mine:: 12699 recs/sec Errors 0 Timeouted 0 10k connections, 100k requests: yesod: 5205 recs/sec Errors 81152 Timeouted 3842 Mine: 8160 recs/sec Errors 0 Timeouted 46 Sources: Yesod: / HomeR GET |] instance Yesod HelloWorld getHomeR :: Handler () getHomeR = do number <- liftIO (randomIO :: IO Float) let txt = pack $ "hello world " ++ show number sendResponse (txt:: Text) main :: IO () main = warp 3838 HelloWorld Mine: import Sockets import Foreign.C.String import Data.IORef import Control.Concurrent main = do ref <- newIORef 1 s <- socket defaultCallbacks { constructor = \ci -> set_cb ci defaultCallbacks { done_connected = binded ref, done_reading = process } } pl <- epoll 1000 pl1 <- epoll 1000 pl2 <- epoll 1000 pl3 <- epoll 1000 listen s "8080" pl_accept pl s pl_accept pl1 s pl_accept pl2 s pl_accept pl3 s let run pl = do forkIO $ run_loop pl (-1) run pl run pl1 run pl2 run_loop pl3 (-1) binded ref pl s = do i <- readIORef ref putStrLn $ "connection nr:"++show i writeIORef ref (i+1) pl_read pl s return 0 process pl s buf len = do str <- peekCStringLen (buf,fromIntegral len) ip <- client s str1 <- peekCString ip putStrLn $ "from "++str1++" \ngot "++str write pl s "Hello World!!!\r\n" return 0 if using -threaded performance is *worse*. Greetings, Branimir.

It is mine lib for https://www.volomp.com https://www.volomp.com/ I work now here https://www.rt-rk.com https://www.rt-rk.com/ on this http://www.vti.mod.gov.rs/index.php?view=actuality&type=projects&category=1&id=72 http://www.vti.mod.gov.rs/index.php?view=actuality&type=projects&category=1&id=72 I guess that if I port it to Haskell purely from CPP, I won’t have problems with copyright? Greetings, Branimir
On 25.09.2021., at 09:22, Branimir Maksimovic
wrote: Let’s compare: 1000 parallel connections 100k requests
yesod : 7658 recs/sec Errors 85808 Timeouted 0
Mine:: 12699 recs/sec Errors 0 Timeouted 0
10k connections, 100k requests: yesod: 5205 recs/sec Errors 81152 Timeouted 3842
Mine: 8160 recs/sec Errors 0 Timeouted 46
Sources: Yesod: / HomeR GET |]
instance Yesod HelloWorld
getHomeR :: Handler () getHomeR = do number <- liftIO (randomIO :: IO Float) let txt = pack $ "hello world " ++ show number sendResponse (txt:: Text)
main :: IO () main = warp 3838 HelloWorld
Mine: import Sockets import Foreign.C.String import Data.IORef import Control.Concurrent
main = do ref <- newIORef 1 s <- socket defaultCallbacks { constructor = \ci -> set_cb ci defaultCallbacks { done_connected = binded ref, done_reading = process } } pl <- epoll 1000 pl1 <- epoll 1000 pl2 <- epoll 1000 pl3 <- epoll 1000 listen s "8080" pl_accept pl s pl_accept pl1 s pl_accept pl2 s pl_accept pl3 s let run pl = do forkIO $ run_loop pl (-1) run pl run pl1 run pl2 run_loop pl3 (-1)
binded ref pl s = do i <- readIORef ref putStrLn $ "connection nr:"++show i writeIORef ref (i+1) pl_read pl s return 0
process pl s buf len = do str <- peekCStringLen (buf,fromIntegral len) ip <- client s str1 <- peekCString ip putStrLn $ "from "++str1++" \ngot "++str write pl s "Hello World!!!\r\n" return 0
if using -threaded performance is *worse*.
Greetings, Branimir.

That would be fun to share ! Look forward to learning what’s different On Sat, Sep 25, 2021 at 3:51 AM Branimir Maksimovic < branimir.maksimovic@gmail.com> wrote:
It is mine lib for https://www.volomp.com I work now here https://www.rt-rk.com on this http://www.vti.mod.gov.rs/index.php?view=actuality&type=projects&category=1&id=72
I guess that if I port it to Haskell purely from CPP, I won’t have problems with copyright?
Greetings, Branimir
On 25.09.2021., at 09:22, Branimir Maksimovic < branimir.maksimovic@gmail.com> wrote:
Let’s compare: 1000 parallel connections 100k requests
yesod : 7658 recs/sec Errors 85808 Timeouted 0
Mine:: 12699 recs/sec Errors 0 Timeouted 0
10k connections, 100k requests: yesod: 5205 recs/sec Errors 81152 Timeouted 3842
Mine: 8160 recs/sec Errors 0 Timeouted 46
Sources: Yesod: / HomeR GET |]
instance Yesod HelloWorld
getHomeR :: Handler () getHomeR = do number <- liftIO (randomIO :: IO Float) let txt = pack $ "hello world " ++ show number sendResponse (txt:: Text)
main :: IO () main = warp 3838 HelloWorld
Mine: import Sockets import Foreign.C.String import Data.IORef import Control.Concurrent
main = do ref <- newIORef 1 s <- socket defaultCallbacks { constructor = \ci -> set_cb ci defaultCallbacks { done_connected = binded ref, done_reading = process } } pl <- epoll 1000 pl1 <- epoll 1000 pl2 <- epoll 1000 pl3 <- epoll 1000 listen s "8080" pl_accept pl s pl_accept pl1 s pl_accept pl2 s pl_accept pl3 s let run pl = do forkIO $ run_loop pl (-1) run pl run pl1 run pl2 run_loop pl3 (-1)
binded ref pl s = do i <- readIORef ref putStrLn $ "connection nr:"++show i writeIORef ref (i+1) pl_read pl s return 0
process pl s buf len = do str <- peekCStringLen (buf,fromIntegral len) ip <- client s str1 <- peekCString ip putStrLn $ "from "++str1++" \ngot "++str write pl s "Hello World!!!\r\n" return 0
if using -threaded performance is *worse*.
Greetings, Branimir.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

just to translate all thing into Haskell, I have it whole in Rust currently: https://github.com/bmaxa/web_server_rust https://github.com/bmaxa/web_server_rust Greets, Branimir.
On 26.09.2021., at 17:27, Carter Schonwald
wrote: That would be fun to share ! Look forward to learning what’s different
On Sat, Sep 25, 2021 at 3:51 AM Branimir Maksimovic
mailto:branimir.maksimovic@gmail.com> wrote: It is mine lib for https://www.volomp.com https://www.volomp.com/ I work now here https://www.rt-rk.com https://www.rt-rk.com/ on this http://www.vti.mod.gov.rs/index.php?view=actuality&type=projects&category=1&id=72 http://www.vti.mod.gov.rs/index.php?view=actuality&type=projects&category=1&id=72 I guess that if I port it to Haskell purely from CPP, I won’t have problems with copyright?
Greetings, Branimir
On 25.09.2021., at 09:22, Branimir Maksimovic
mailto:branimir.maksimovic@gmail.com> wrote: Let’s compare: 1000 parallel connections 100k requests
yesod : 7658 recs/sec Errors 85808 Timeouted 0
Mine:: 12699 recs/sec Errors 0 Timeouted 0
10k connections, 100k requests: yesod: 5205 recs/sec Errors 81152 Timeouted 3842
Mine: 8160 recs/sec Errors 0 Timeouted 46
Sources: Yesod: / HomeR GET |]
instance Yesod HelloWorld
getHomeR :: Handler () getHomeR = do number <- liftIO (randomIO :: IO Float) let txt = pack $ "hello world " ++ show number sendResponse (txt:: Text)
main :: IO () main = warp 3838 HelloWorld
Mine: import Sockets import Foreign.C.String import Data.IORef import Control.Concurrent
main = do ref <- newIORef 1 s <- socket defaultCallbacks { constructor = \ci -> set_cb ci defaultCallbacks { done_connected = binded ref, done_reading = process } } pl <- epoll 1000 pl1 <- epoll 1000 pl2 <- epoll 1000 pl3 <- epoll 1000 listen s "8080" pl_accept pl s pl_accept pl1 s pl_accept pl2 s pl_accept pl3 s let run pl = do forkIO $ run_loop pl (-1) run pl run pl1 run pl2 run_loop pl3 (-1)
binded ref pl s = do i <- readIORef ref putStrLn $ "connection nr:"++show i writeIORef ref (i+1) pl_read pl s return 0
process pl s buf len = do str <- peekCStringLen (buf,fromIntegral len) ip <- client s str1 <- peekCString ip putStrLn $ "from "++str1++" \ngot "++str write pl s "Hello World!!!\r\n" return 0
if using -threaded performance is *worse*.
Greetings, Branimir.
_______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.

Hi Branimir,
I guess that if I port it to Haskell purely from CPP, I won’t have problems with copyright?
I will retain exactly the same copyright it had. To get rid of the old copyright, you'd need to clean-room re-implement it (you yell ideas from another room and somebody implements them in Haskell not having seen the CPP code beforehand).
if using -threaded performance is *worse*.
This is normal. You trade performance for the ability to pre-empt (e.g., not get stuck on blocking FFI). Kind regards, Mikolaj
participants (3)
-
Branimir Maksimovic
-
Carter Schonwald
-
Mikolaj Konarski