Than don't pass them to multiple readers? вторник, 13 августа 2013 г., 8:23:25 UTC+4 пользователь Jakeb Rosoman написал: > > Aren't simple-stream's still a bit problematic if you pass them around > like values? Because multiple readers would still interfere with each other > wouldn't they? > > On Tuesday, August 13, 2013 4:05:02 AM UTC+12, Eldar wrote: >> >> If you want to create some function which accepts a stream and can affect >> it's state you should be able to destroy the given stream on demand >> e.g. when something went wrong and/or you are not interested in receiving >> data anymore. >> Unfortunately that's impossible with current node readable streams because >> they: >> >> 1. Support multiple consumers >> 2. Don't have common cleanup interface >> >> So you can't touch another's stream because someone else may use it >> and if you could you don't know how. >> >> The absence of ability to pass streams as arguments is a huge flow. You can >> build almost nothing >> without that. Now someone may wonder: but there are so many useful modules >> about streams in npm!? >> Right. They all rely on `.pipe()`. For some reason all kind of blog posts, >> tutorials and even node's >> own documentation teach that for passing readable you can do >> `readable.pipe(writable)`. >> E.g. http file server could be: >> >> ```javascript >> var http = require('http') >> var fs = require('fs') >> http.createServer(function(req, res) { >> res.writeHead(200, {'Content-Type': 'text/plain'}) >> fs.createReadStream(req.url.slice(1)).pipe(res) >> }).listen(3000) >> ``` >> >> That's a lie. Exactly for the reasons above `.pipe()` doesn't cleanup any >> resources. >> Everything works fine until the streaming process completes successfully. >> But if something fails you get horrible leaks and hangs. >> Almost every module doing stream processing have this flow. Obvious or not. >> >> That all is sad. We need another, simpler API. Although I believe >> incompatible changes should be made >> to node core that is not what I am calling about (at least not at the first >> place). >> But we definitely should stop to expose node streams in userland modules, >> stop to extend "stream base classes", just stop to use it in userland. >> >> Now the constructive part. Tim Caswell proposed recently simple-stream >> <https://github.com/creationix/js-git/blob/master/specs/simple-stream.md> >> and build many things on top of it. >> >> Let's just peek this API as a standard and start using it. >> Here is readable-to-simple-stream >> <https://github.com/eldargab/stream-simple> converter which can be used for >> dealing with node core. >> >> It also contains slightly more detailed version of original spec which could >> be discussed. >> >> That's it. >> >>
-- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.