This thread is pretty huge.

At this point, would people say there is more confusion about streams2 than old 
streams? I know that some of this is a little hard to get our heads around but 
i always got the feeling that only about 10 people really understood all of old 
streams.

-Mikeal

On Mar 25, 2013, at 2:40PM, Marco Rogers <marco.rog...@gmail.com> wrote:

> I'm more and more convinced that need to go back and read all the available 
> info about streams2. Answering these detail semantics questions is pretty 
> important.
> 
> :Marco
> 
> On Mon, Mar 25, 2013 at 2:29 PM, Michael Jackson <mjijack...@gmail.com> wrote:
> If stream.read returns null that could mean one of two things:
> 
>   1) the stream doesn't currently have any data, but still might have some in 
> the future
>   2) the stream is already ended
> 
> AFAICT, the only way you can know which state you're in is by checking the 
> stream.readable property which is marked as being a "legacy" property in the 
> code, so it seems like it's not a good idea to rely on that property either.
> 
> --
> Michael Jackson
> @mjackson
> 
> 
> On Mon, Mar 25, 2013 at 1:50 PM, Dan Milon <danmi...@gmail.com> wrote:
> You're right, my bad.
> 
> But still, data stay in the buffer until someone tries to `.read()`.
> So, if you're being passed a stream that you dont know whether the
> first `readable` event has fired, you can try to actually read from
> it. If it returns null, then you wait for `readable`.
> 
> On 03/25/13 22:42, Michael Jackson wrote:
> > readable is emitted after you've actually started reading.
> >
> >
> > That's not what it says in the docs
> > <http://nodejs.org/api/stream.html#stream_event_readable>.
> >
> > ### Event: 'readable' When there is data ready to be consumed,
> > this event will fire. When this event emits, call the read() method
> > to consume the data. ###
> >
> > Calling stream.read *before* you get the "readable" event is
> > totally counterintuitive.
> >
> > -- Michael Jackson @mjackson
> >
> > In your example, you dont ever `response.read()`, so no readable
> > event is ever emitted.
> >
> > As you said, streams start in paused state and ready to be read.
> >
> > On 03/25/13 22:28, Michael Jackson wrote:
> >> Is it correct to assume that a Readable won't emit the
> >> "readable"
> > event
> >> until you're registered for it?
> >>
> >> Reading through the streams2 docs, I was under the impression
> >> that all streams start out paused and don't start emitting data
> >> until you add either a "data" (for old streams) or a "readable"
> >> listener. For new streams, this should mean that they don't emit
> >> "readable" until at
> > least
> >> one listener is registered. Otherwise we still need to do some
> > buffering
> >> in order to capture all the data.
> >>
> >> For example, this code misses the readable event on node 0.10:
> >>
> >> var http = require('http');
> >>
> >> http.get('http://www.google.com', function (response) {
> >> console.log('got response with status ' + response.statusCode);
> >>
> >> setTimeout(function () { response.on('readable', function () {
> >> console.log('readable'); });
> >>
> >> response.on('end', function () { console.log('end'); }); }, 5);
> >> });
> >>
> >> Here's my shell session:
> >>
> >> $ node -v v0.10.0 $ node http-test.js got response with status
> >> 200 $
> >>
> >> Is this the correct behavior?
> >>
> >> -- Michael Jackson @mjackson
> >>
> >>
> >> On Thu, Mar 21, 2013 at 4:27 PM, Isaac Schlueter <i...@izs.me
> > <mailto:i...@izs.me>
> >> <mailto:i...@izs.me <mailto:i...@izs.me>>> wrote:
> >>
> >> re old-mode
> >>
> >> Yes, that's fine.  If you just want to get all the data asap, use
> >> on('data', handler).  It'll work great, and it's still very fast.
> >> pause()/resume(), the whole bit.  (The difference is that it
> >> won't emit data until you're listening, and pause() will
> >> *actually*
> > pause.)
> >>
> >>
> >> Re read(cb)
> >>
> >> It's problematic for reasons that I've discussed all of the
> >> places where it's been brought up.  That horse is dead, let's
> >> stop
> > beating
> >> it.  (There were a few other proposals as well, btw.
> > Reducibles and
> >> some other monadic approaches come to mind.)
> >>
> >>
> >> Re pipe() vs looping around read() vs custom Writable vs
> > on('data')
> >>
> >> Whatever works for your case is fine.  It's flexible on
> > purpose, and
> >> allows more types of consumption than streams1, and creating
> > custom
> >> writables is easier than it was in streams1.
> >>
> >> If you find something that the API can't do for you, or find
> > yourself
> >> doing a lot of backflips or overriding a lot of methods to get
> > your
> >> stuff working, then let's chat about it in a github issue.
> > You might
> >> be missing something, or you might have found a genuine
> > shortcoming in
> >> the API.
> >>
> >>
> >>
> >> On Thu, Mar 21, 2013 at 2:01 PM, Sigurgeir Jonsson
> >> <ziggy.jonsson....@gmail.com
> > <mailto:ziggy.jonsson....@gmail.com>
> > <mailto:ziggy.jonsson....@gmail.com
> > <mailto:ziggy.jonsson....@gmail.com>>>
> >> wrote:
> >>> Thanks for all the answers. I almost forgot to look back at
> >>> this
> >> thread as
> >>> the custom writeStreams have exceeded the high expectation I
> >>> had
> >> already for
> >>> Streams 2. For me, the reference manual was a little
> >>> confusing, as
> > there are
> >> complete
> >>> examples on using the read method, no mention of  "reading"
> > through a
> >>> writeStream endpoint.
> >>>
> >>> Marco, I agree that that read has more detailed control of
> > minimum
> >> incoming
> >>> content.  However I wonder if it would be more efficient to
> > default
> >>> pipe.chunkSize to a "lowWatermark" of the receiver (if
> >>> defined).
> >> This
> >>> lowWatermark could be adjusted dynamically and the callback
> > in the
> >> writable
> >>> should keep sequence of events under control?
> >>>
> >>> Anyway, thanks Node team, I'm very impressed!
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> On Wednesday, March 20, 2013 4:45:32 AM UTC-4, Marco Rogers
> > wrote:
> >>>>
> >>>> @Nathan's response is right. Creating a writable stream is
> >> preferable in
> >>>> most cases. But I wanted to add a little context to that. If
> >> you're dealing
> >>>> with a base readable stream, it's just pushing chunks of
> > data at
> >> you off the
> >>>> wire. Your first task is to collect those chunks into
> > meaningful
> >> data. So
> >>>> IMO the reason creating a writable stream is preferable is
> > because it
> >>>> prompts you not just read off the stream, but to create
> > semantics
> >> around
> >>>> what the new stream is supposed to be. The api reflects this
> >> opinion and
> >>>> that's why creating writable streams feels like the more
> > natural
> >> way, and
> >>>> the ugliness of dealing with read() is wrapped up in the
> >>>> pipe()
> >> method. It
> >>>> was kind of designed that way.
> >>>>
> >>>> But the read() api was also designed for a use case. It's
> >>>> meant
> >> to handle
> >>>> low/high water marks effectively, as well as enable more
> >> optimized special
> >>>> parsing by reading off specific lengths of chunks. These
> >>>> were
> >> things that
> >>>> people kept needing, but the old api didn't support well.
> > If you were
> >>>> writing a library for a special parser, you might write a
> > custom
> >> Writable
> >>>> stream and inside it you would be using the read(n) api to
> >> control *how* you
> >>>> read data off the socket. I hope that makes sense.
> >>>>
> >>>> :Marco
> >>>>
> >>>> On Monday, March 18, 2013 11:06:48 AM UTC-7, Sigurgeir
> > Jonsson wrote:
> >>>>>
> >>>>> The new streams have excellent support for high/low
> > watermarks and
> >>>>> auto-pausing/resuming, but the documentation confuses me a
> > little...
> >>>>> particularly the read method.
> >>>>>
> >>>>> When I read the new docs for the first time I was under
> >>>>> the
> >> impression
> >>>>> that the optimal way to become a user of a stream is to
> >>>>> write
> >> loops around
> >>>>> the read functio.  However in practice I find myself
> >>>>> simply
> >> writing custom
> >>>>> writeStreams and use the callback to control upstream
> >>>>> pressure
> >> (in addition
> >>>>> to source Watermarks if needed).   Here is an example
> >>>>> where I
> >> move the
> >>>>> output to a queue that executes a custom function in
> > parallel (i.e.
> >>>>> uploading to a database)
> > https://gist.github.com/ZJONSSON/5189249
> >>>>>
> >>>>> Are there any benefits to using the read method directly
> >>>>> on a
> >> stream vs.
> >>>>> piping to a custom Writable stream?
> >>>
> >>> -- -- 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
> > <mailto:nodejs@googlegroups.com>
> >> <mailto:nodejs@googlegroups.com
> >> <mailto:nodejs@googlegroups.com>>
> >>> To unsubscribe from this group, send email to
> >>> nodejs+unsubscr...@googlegroups.com
> > <mailto:nodejs%2bunsubscr...@googlegroups.com>
> >> <mailto:nodejs%2bunsubscr...@googlegroups.com
> > <mailto:nodejs%252bunsubscr...@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
> > <mailto:nodejs%2bunsubscr...@googlegroups.com>
> >> <mailto:nodejs%2bunsubscr...@googlegroups.com
> > <mailto:nodejs%252bunsubscr...@googlegroups.com>>.
> >>> For more options, visit
> > https://groups.google.com/groups/opt_out.
> >>>
> >>>
> >>
> >> -- -- 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
> > <mailto:nodejs@googlegroups.com>
> >> <mailto:nodejs@googlegroups.com <mailto:nodejs@googlegroups.com>>
> >> To unsubscribe from this group, send email to
> >> nodejs+unsubscr...@googlegroups.com
> > <mailto:nodejs%2bunsubscr...@googlegroups.com>
> >> <mailto:nodejs%2bunsubscr...@googlegroups.com
> > <mailto:nodejs%252bunsubscr...@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
> > <mailto:nodejs%2bunsubscr...@googlegroups.com>
> >> <mailto:nodejs%2bunsubscr...@googlegroups.com
> > <mailto:nodejs%252bunsubscr...@googlegroups.com>>.
> >> For more options, visit
> >> https://groups.google.com/groups/opt_out.
> >>
> >>
> >>
> >> -- -- 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
> > <mailto:nodejs@googlegroups.com>
> >> To unsubscribe from this group, send email to
> >> nodejs+unsubscr...@googlegroups.com
> > <mailto:nodejs%2bunsubscr...@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
> > <mailto:nodejs%2bunsubscr...@googlegroups.com>.
> >> For more options, visit
> >> https://groups.google.com/groups/opt_out.
> >>
> >>
> >
> >
> 
> 
> 
> -- 
> -- 
> 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 a topic in the Google 
> Groups "nodejs" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/nodejs/8VGu32aczR0/unsubscribe?hl=en.
> To unsubscribe from this group and all its topics, send an email to 
> nodejs+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  
> 
> 
> 
> -- 
> Marco Rogers
> marco.rog...@gmail.com | https://twitter.com/polotek
> 
> Life is ten percent what happens to you and ninety percent how you respond to 
> it.
> - Lou Holtz
> 
> -- 
> -- 
> 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.
>  
>  

-- 
-- 
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.


Reply via email to