node.js上的websocket握手

我正在尝试构build一个代码来pipe理与node.js的websocket连接

我没有find一个方法让握手在铬中被接受

Chrome返回“WebSocket连接到'ws://127.0.0.1:8888 /'失败:在WebSocket握手期间出现错误:Sec-WebSocket-Accept不匹配”

有了这个

<< >>>

var http=require("http"); var crypto=require("crypto"); var server=http.createServer(function(req,res){ res.writeHeads("200","content-type:text/plain"); res.end(); }); server.on("upgrade",function(req,socket,head){ for(var item in req.headers){ console.log(item); console.log(req.headers[item]); } var GUID="258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; var secKey=req.headers["sec-websocket-key"]; var sha=crypto.createHash("sha1"); secKey+=GUID; secKey=sha.update(secKey).digest("base64"); var key64=new Buffer(secKey); key64=key64.toString("base64"); console.log(key64); var headersReturn='HTTP/1.1 101 Switching Protocols\r\n'; headersReturn+='Upgrade: websocket\r\n'; headersReturn+='Connection: Upgrade\r\n'; headersReturn+='Sec-WebSocket-Accept:'+key64+"\r\n\r\n"; var boo=socket.write(headersReturn); console.log(headersReturn); socket.on("connect",function(){console.log("success");}); socket.on("data",function(data){ console.log(data); }); }); server.listen(8888,"127.0.0.1",function(){ console.log("server is on 8888"); }); 

<<< >>>>

希望有人会看到缺less的东西。

代码的问题是你试图base64两次。 不需要base64已经在base64中的secKey.Its。

注释以下几行。

 var key64=new Buffer(secKey); key64=key64.toString("base64"); 

在上面的注释行之后添加此代码。

 var key64 = secKey; 

上述修改之后,错误消失了。