Comments (3)
I found that I can do the following:
-- Client.hs
module Client where
main = do
let settings = clientSettings 80 "127.0.0.1"
result <- runTCPClient settings $ \appData -> do
runConduit $ yield "request" .| appSink appData
lazy <- runConduit $ appSource appData .| mapC Builder.byteString .| sinkLazyBuilder
return $ toStrict lazy
print result
Now I get a single value from runConduit
, but this program hangs forever. I assume that it waits forever for more ByteStrings (which will never arrive).
from conduit.
In order to make a system like this work, you need to do something like:
- Have the sending side close its send socket to let the receiving side no there's no more data
- Indicate at the beginning of the message how many bytes are coming
- Have some kind of termination signal within the stream
from conduit.
What I ended up doing is the following:
-- Server.hs
module Server where
main = do
let settings = serverSettings 80 "127.0.0.1"
runTCPServer settings $ \appData -> do
void $
runConduitRes $
appSource appData .| handler .| appSink appData
handler :: Monad m => ConduitT ByteString ByteString m ()
handler = whenJustM await (const $ yield veryLongString)
-- Client.hs
module Client where
main = do
let settings = clientSettings 80 "127.0.0.1"
result <- runTCPClient settings $ \appData -> do
runConduit $ yield "request" .| appSink appData
runConduit $ appSource appData .| foldC
print result
With this, the server will get only the first message with await
and then close the connection. I'm not quite satisfied with this solution but it works for my use case. As for the client, I'm not sure if there's a performance degradation on using a single foldC
instead of builders, but again, for my use case it seems to be fine.
from conduit.
Related Issues (20)
- What is ReleaseType for? HOT 2
- `ResourceT` is subject to the `forever` space leak
- slidingWindowC makes consuming tail elements inconvenient HOT 3
- Quadratic performance on left-associated binds HOT 6
- resourcet needs unliftio-core >=0.1.1.0 lower bound
- "stdout" test stalls temporarily sometimes HOT 3
- Implementing delay operator HOT 3
- Clarification regarding `sinkFile` and `sinkFileBS` HOT 1
- Compatibility with mtl-2.3 HOT 5
- Lots of inline-rule-shadowing warnings
- bracketP with custom monad stack HOT 1
- Flaky test suite failure with GHC 9.4.2 / text-2.0.1 HOT 6
- *> leaks space where >> doesn't - so should the *> implementation be optimized? HOT 1
- Confusion with `sourceProcessWithStreams` and `takeExactly` HOT 1
- `sourceProcessWithStreams` without hijacking `stderr`? HOT 2
- Support incrementally feeding into Conduits HOT 1
- Better performance with a left associative `.|`? HOT 2
- Functor instance causes memory leak when used with Shake
- Running a conduit in a function with an unrelated parameter twice leaks memory
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from conduit.