diff options
author | Ben Sima <ben@bsima.me> | 2020-04-01 22:51:47 -0700 |
---|---|---|
committer | Ben Sima <ben@bsima.me> | 2020-04-01 22:51:47 -0700 |
commit | 4ef954f7b3e9b5d99d1030843c2633dbd76f37c0 (patch) | |
tree | b72249c4a5a348a193d9995f1f6228d779150c92 /Run/Que | |
parent | 1877ee48948e5952a694cfc666ff65a986211c46 (diff) |
Bound ques to about 10 items
I also block before taking, instead of doing a mult and tap. This is a
simple way to fix the memory issue, and makes them conceptually simpler
to work with I think.
The channels are still mutli-consumer and multi-producer, which is
fine. I'm not sure now I will implement the regular pubsub, but I'm not
sure there is a great usecase for that anyway.
Diffstat (limited to 'Run/Que')
-rw-r--r-- | Run/Que/Server.hs | 15 |
1 files changed, 3 insertions, 12 deletions
diff --git a/Run/Que/Server.hs b/Run/Que/Server.hs index 69af529..e5094cd 100644 --- a/Run/Que/Server.hs +++ b/Run/Que/Server.hs @@ -96,7 +96,7 @@ routes = do case poll of True -> Scotty.stream $ streamQue q _ -> do - r <- liftIO <| takeQue q + r <- liftIO <| Go.read q Scotty.html <| fromStrict <| Encoding.decodeUtf8 r -- | POST que @@ -119,7 +119,7 @@ routes = do app . modify <| upsertNamespace ns q <- app <| que ns qp qdata <- Scotty.body - liftIO <| pushQue (BSL.toStrict qdata) q + liftIO <| Go.write q <| BSL.toStrict qdata return () -- | Given `guardNs ns whitelist`, if `ns` is not in the `whitelist` @@ -222,15 +222,6 @@ que ns qp = do if queExists then return <| grab qp qbase else do - c <- liftIO Go.chan + c <- liftIO <| Go.chan 5 modify (insertQue ns qp c) gets ques /> grab ns /> grab qp - --- | Put data on the que. -pushQue :: Quedata -> Que -> IO () -pushQue = flip Go.write - --- | Tap and read from the Que. Tap first because a Que is actually a --- broadcast channel. This allows for multiconsumer Ques. -takeQue :: Que -> IO Quedata -takeQue ch = Go.mult ch >>= Go.tap |