node.js上的websocket握手



我正在尝试构建一个代码,用node.js 管理websocket连接

我找不到在chrome 中接受握手的方法

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

用这个

<lt;>>>

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 Protocolsrn';
headersReturn+='Upgrade: websocketrn';
headersReturn+='Connection: Upgradern';
headersReturn+='Sec-WebSocket-Accept:'+key64+"rnrn";
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");

            });

<lt<>>

希望有人能看到缺失的东西。

代码的问题是您尝试了两次base64。不需要base64的secKey。它已经在base64中了。

对以下几行进行注释。

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

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

var key64 = secKey;

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

相关内容

  • 没有找到相关文章

最新更新