> 3. Make sure to not do anything even slightly wrong! This part is really hard. I don't think I've written a single stream module that complies with it. (and I've written 60. it's really hard)
On Mon, Apr 1, 2013 at 5:39 PM, Isaac Schlueter <[email protected]> wrote: > Compared with the stuff that you needed to do with streams1, streams2 > is much much easier. Basically: > > 1. Pick the class you're extending: Readable, Writable, Duplex, Transform > 2. Implement the constructor, and one method. (Well, 2 for Duplex, > but that's to be expected.) > > If you are doing a non-byte string, then set `objectMode:true` in the > appropriate options object. This is not something I personally > recommend, but hey, some people like it. > > For 99% or more of use cases, this is all you need to do. > > Compare with streams1: > > 1. For readable streams, implement pause, resume, emit 'data' and > 'end' events at the appropriate time. (Do you buffer while paused? > Answers vary from "always" to "never".) > 2. For writable streams, implement write() (which has to return the > appropriate value if it buffers), and make sure to emit 'drain' if you > ever return false, and implement end() (which can also can take a > chunk argument). > 3. Make sure to not do anything even slightly wrong! > > > On Mon, Apr 1, 2013 at 10:45 AM, Mikeal Rogers <[email protected]> > wrote: > > 350 is a big number until you factor out the number of those written by 3 > > people (you, substack and Raynos). many modules might exists but, it is > my > > impression, that most of them are written by about a dozen people. this > > impression could be wrong but i've been around since we first started > > defining this API and every time i sit down to write a new stream i get > bit > > by something i forgot i needed to do. > > > > -Mikeal > > > > On Apr 1, 2013, at 10:41AM, Dominic Tarr <[email protected]> wrote: > > > > @mikeal when I last checked a few weeks ago there where over 350 stream > > modules in npm. > > > > > > > > > > On Tue, Mar 26, 2013 at 9:38 PM, Isaac Schlueter <[email protected]> wrote: > >> > >> > You're still doing it wrong. This is like complaining that you can't > >> > tell a stream is ended because you waited to attach an `end` event > handler. > >> > >> But that's supported, now :) If you don't consume the stream, it > >> never emits 'end', even if it never has any data. You still have to > >> read() or on('data') or resume() it. > >> > >> You could argue that the 'readable' is only for state transitions, I > >> suppose, and the correct approach is to try to read, and only wait for > >> 'readable' if there's nothing there. But there's little harm in > >> re-emitting the event, at least the first time, and it's an easy > >> change to make. (We already special-case 'data' and 'readable' for > >> other reasons.) > >> > >> Part of the reason why this is an issue for you is that the HTTP > >> implementation's interaction with the TCP layer is utter shit. Look > >> for changes there in 0.12. In the meantime, we should make this work, > >> if only because some other crappily-built stream is likely to be > >> similarly broken in this surprising way ;) > >> > >> Taking the bug report to an issue is 100% the correct move, thanks. > >> Let's continue the discussion of that specific point there. > >> > >> -- > >> -- > >> 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. > >> > >> > > > > > > -- > > -- > > 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. > > > > > > > > > > -- > > -- > > 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. > > > > > > -- > -- > 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. > > > -- -- 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.
