在Draft 10中,如果解析数据的过程弄清楚了,这个就更简单了,返回数据的格式和之前接受到的数据格式非常类似,只是你不用生成mask了,头部的其他格式还是一模一样的。

第一个字节还是固定的,是0x81,意义和接受数据的意义一样,第二个字节也是,后七个位表示数据长度,由于没有mask,所以第一位是0;长度的表示方法和接受的标识方法一致,可能用7位表示,也可能用16位表示。

用NodeJS实现如下:

var socketWriter = {
    'draft10': function(socket, data){
        var frames,
            length = new Buffer(data, 'utf8').length;
        if(data.length > 0x7d){
            frames = new Buffer(4);
            frames[0] = 0x81;
            frames[1] = 0x7e;
            frames[2] = length >> 8;
            frames[3] = length & 0xFF; //1111 1111
        }
        else{
            frames = new Buffer(2);
            frames[0] = 0x81;
            frames[1] = length;
        }
        
        if (socket.writable) {
            socket.write(frames, 'binary');
            socket.write(data, 'utf8');
            return true;
        }
        return false;
    },
    'draft76': function(socket, data){
        var byteLen = Buffer.byteLength(data, 'utf8'),
            bytes = new Buffer(byteLen + 2);

        bytes[0] = 0x00;
        bytes.write(data, 1, 'utf8');
        bytes[byteLen + 1] = 0xFF;

        return socket.write(bytes);
    }
};

socketWriter['draft75'] = socketWriter['draft76'];

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.