Joseph, I think you could try calling `writecb` immediately up until your internal queue will fill up, and then starts calling it as soon as you can do next write.
On Mon, Feb 24, 2014 at 5:14 PM, greelgorke <[email protected]> wrote: > may be examples of your code would help > > > Am Montag, 24. Februar 2014 11:38:22 UTC+1 schrieb Joseph Gentle: >> >> I'm (finally!) making node-browserchannel extend streams, but I can't >> figure out how to make streams do what I want. (browserchannel is a >> socketio-like library if you haven't seen it - >> https://github.com/josephg/node-browserchannel ). >> >> I'm using a stream in objectMode (because its sending chunked messages). I >> want to be able to have many messages in-flight at a time (I can send many >> messages in reply to a long polling HTTP request from the client). According >> to the spec for streams, My problem is that _write won't let me process >> multiple messages at a time - according to the spec, I should only call the >> _write() callback when the message has been 'flushed', and _write doesn't >> get called again until a process.nextTick() after I call the callback. >> >> - If I'm honest and call the callback only after the http response has >> been fired, I can only send one message per http response (_write doesn't >> get called again until the next event loop fires). Having only one message >> in-flight at a time is a _huge_ performance regression. >> - If I lie and call the callback immediately, the stream behaves badly. >> For example, if you call end() with a message on the stream, the stream >> emits 'finish' long before the messages have actually been delivered to the >> client. You also can't syncronously send a bunch of response messages in >> response to a single request message - unless I do a setTimeout(..., 10) or >> something awful I have no way to bunch the responses into a single HTTP >> response. >> >> Is there a good answer here? I can't think of a decent way to obey the >> streams protocol while still being performant. I could make my own duck >> typed implementation of the Duplex streams API, though I'll probably make >> mistakes and I won't have pipe() support. ... Are there any other good >> options? >> >> -J >> >> > -- > -- > 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.
