node.js上的websocket握手 [英] websocket handshake on node.js

查看:127
本文介绍了node.js上的websocket握手的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立一个代码来管理与node.js的websocket连接



我没有找到一种方法让握手在chrome中被接受



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

$ b b



pre $ p



$ > var http = require(http);
var crypto = require(crypto);

var server = http.createServer(function(req,res){

res.writeHeads(200,content-type:text / plain);
res.end();


});
$ b server.on(升级,函数(req,套接字,头){

(需要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切换Protocols \r\\\
';
headersReturn + ='Upgrade:websocket \r\\\
';
headersReturn + ='Connection:Upgrade\r\\\
';
headersReturn + ='Sec-WebSocket-Accept:'+ key64 +\r\\\
\r\\\
;

var boo = socket.write(headersReturn);

console.log(headersReturn);

socket.on(connect,function(){console.log(success); });
socket.on(data,function(data){
console.log(data);
});

});
$ b server.listen(8888,127.0.0.1,function(){

console.log(server is on 8888);



});

<<< >>>>



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

解决方案

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



注释以下几行:

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

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

  var key64 = secKey; 

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


I am trying to build a code that manage websocket connection with node.js

I am not finding a way to have the handshake being accept in chrome

Chrome return "WebSocket connection to 'ws://127.0.0.1:8888/' failed: Error during WebSocket handshake: Sec-WebSocket-Accept mismatch "

with this

<<>>>

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");



            });

<<<>>>>

Hope someone would see what is missing.

解决方案

The problem with the code is you are trying to base64 twice. No need to base64 the secKey.Its already in base64.

Comment the following lines.

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

Add this code after the above commented lines.

var key64 = secKey;

After the above modification the errors vanished.

这篇关于node.js上的websocket握手的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆