[Haskell-cafe] mine sockets lib vs yesod
Carter Schonwald
carter.schonwald at gmail.com
Sun Sep 26 15:27:39 UTC 2021
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 at 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 at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20210926/142b6148/attachment.html>
More information about the Haskell-Cafe
mailing list