Hello,

I am working on another WebSocket RFC6455 implementation and am currently 
trying to handle following issue:
The "data" events of the socket instance I receive from the http server's 
"upgrade" event does (in specific use-cases) provide chunked data instead 
of the direct frames.

These use cases are:

1. When the frame exceeds the size of the highWaterMark of 16kb (causes the 
frame to get splitted)
2. When the incoming frames have low latency to each other (e.g. on for 
loops) they are glued together

To get frame chunks out of the above use-cases I wrote a TransformStream.
The thing about the below implementation is that it feels wrong. 
Are my feelings correct? Is there an alternative?


function WebSocketStream(options) {
    stream.Transform.call(this, options);

    this.cache = null;
    this.caching = false;
}

util.inherits(WebSocketStream, stream.Transform);

WebSocketStream.prototype._transform = function(chunk, encoding, done) {
    // if we are package was incomplete concat the chunk with cache 
    if (this.caching) {
        chunk = Buffer.concat([this.cache, chunk]);
        this.cache = null;
        this.caching = false;
    }
    
    // detect if frame is incomplete, set flags and return
    if (isSplittedFrame(chunk)) {
        this.cache = chunk;
        this.caching = true;

        return done();
    }

    while (chunk) {
        this.push(frameOnly(chunk));
        chunk = remnantOnly(chunk);
    }

    done();
};

module.exports = WebSocketStream;

Best regards,
Bodo Kaiser

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