Chrome 16 websocket binary



我试图在node.js中设置websocket服务器,但有问题。我在stackoverflow上找到了一个位代码,这里是我现在拥有的服务器代码:

var net = require("net"), crypto = require("crypto"), users = [];
net.createServer(function(socket) {
    this.name = "Anonymous";
    users.push(socket);     
    socket.on('data', function(buffer) {
        if(buffer.toString('utf-8').substring(0, 14) === "GET / HTTP/1.1") {
            this.securyPattern = /Sec-WebSocket-Key: (.*)/g;
            this.key = this.securyPattern.exec(buffer);
            this.magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
            this.sha1 = crypto.createHash("sha1");
            this.sha1.update(this.key[1] + this.magic);
            this.accept = this.sha1.digest("base64");
            socket.write("HTTP/1.1 101 Switching ProtocolsrnUpgrade: WebSocketrnConnection: UpgradernSec-WebSocket-Accept: " + this.accept + "rnrn");
        } else {
            console.log(buffer);
            console.log(buffer.toString('utf-8'));
        }
    });
    socket.on('end', function() {
        users.splice(users.indexOf(socket), 1);
    });
}).listen(1337);

一切工作正常,因为它连接,和用户。当发生这种情况或有人断开连接时,长度会更新。

问题是,我不知道如何读取消息除了头(这是纯文本),所以我必须打印缓冲区和buffer. tostring ('utf-8')的行只打印一些二进制不同的东西所有的时间,例如单词"hello":

<Buffer 81 85 71 dc c1 02 19 b9 ad 6e 1e>
??q??☻↓??n▲
<Buffer 81 85 8e 8f 0f a2 e6 ea 63 ce e1>
????☼???c??

我发送这个"你好"与Chrome 16使用:myWebSocket.send("hello");其中myWebSocket是WebSocket对象。

那么我如何读写消息到这个套接字呢?

请注意,在握手之后,数据在每帧的开始都有2个或更多的报头字节。另外,请注意,从客户机(浏览器)发送到服务器的有效负载使用一个简单的4字节运行异或掩码进行屏蔽。

分帧定义在规范

的第5节中定义

与其在Node中实现自己的WebSocket服务器,不如考虑使用更高层次的抽象,如Socket.IO。

下面是我处理缓冲区的代码:

socket.ondata = function(src,start,end) {
    src = src.slice(start,end);
    var maskKeys = [src[2],src[3],src[4],src[5]];
    var dest = new Array();
    for(var i=0;i<src.length-6;i++){
        var mKey = maskKeys[i%4];
        dest[i] = mKey ^ src[6+i];
    }
    console.log(new Buffer(dest).toString());
}

从这里找到:http://songpengfei.iteye.com/blog/1178310

相关内容

  • 没有找到相关文章

最新更新