Sure but while we are talking about fixing stuff..
On Tuesday, August 13, 2013 10:16:01 PM UTC+12, Eldar wrote:
>
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.