node.js websocket handshake draft-hixie-thewebsocketprotocol-76 не работает! - PullRequest
0 голосов
/ 25 июня 2011

Я выкладываю свой php-сервер websocket на node.js, но я не понимаю, почему мое рукопожатие терпит неудачу! Вот мой код:

var msg = data;
//console.log(msg);

tmp = msg.match(/\r\n\r\n(.*?)$/);
if(tmp) code = tmp[1];

tmp = msg.match(/GET (.*?) HTTP\/1.1/);
if(tmp) res = tmp[1];

tmp = msg.match(/Sec-WebSocket-Key1: (.*?)\r\n/);
if(tmp) key1 = tmp[1];

tmp = msg.match(/Sec-WebSocket-Key2: (.*?)\r\n/);
if(tmp) key2 = tmp[1];

tmp = msg.match(/Host: (.*?)\r\n/);
if(tmp) host = tmp[1];

tmp = msg.match(/Origin: (.*?)\r\n/);
if(tmp) origin = tmp[1];

tmp = msg.match(/Upgrade: (.*?)\r\n/);
if(tmp) upgrade = tmp[1];

tmp = msg.match(/Connection: (.*?)\r\n/);
if(tmp) connection = tmp[1];

tmp = key1.match(/[0-9]/g);
num1 = parseInt(tmp.join(''));

tmp = key2.match(/[0-9]/g);
num2 = parseInt(tmp.join(''));

tmp = key1.match(/\s/g);
spa1 = tmp.length;

tmp = key2.match(/\s/g);
spa2 = tmp.length;

part1 = num1/spa1;
part2 = num2/spa2;

var md5 = crypto.createHash('md5');

test1 = String.fromCharCode(part1 >> 24 & 0xFF, part1 >> 16 & 0xFF, part1 >> 8 & 0xFF, part1 & 0xFF);
md5.update(test1);  

test2 = String.fromCharCode(part2 >> 24 & 0xFF, part2 >> 16 & 0xFF, part2 >> 8 & 0xFF, part2 & 0xFF);
md5.update(test2);

md5.update(code);

var fin = md5.digest('binary');

var out = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"+'Upgrade: '+upgrade+"\r\n"+'Connection: '+connection+"\r\n"+'Sec-WebSocket-Origin: '+origin+"\r\n"+'Sec-WebSocket-Location: ws://'+host+res+"\r\n\r\n"+fin;

console.log(out);
socket.write(out, 'utf8');

Если у кого-то есть идея, я был бы удивлен :) Пробовал этот код с примером, приведенным в спецификации v76 метода рукопожатия, и там все в порядке.

1 Ответ

2 голосов
/ 28 июня 2011

Вы можете обратиться phpwebsocket для получения дополнительной информации.

И в последней версии протокола WebSocket [draft-ietf-hybi-thewebsocketprotocol-09, механизм квитирования обновлен, будет только один «Sec-WebSocket-Key», вы можете узнать больше о пересмотренном механизме квитирования. из моей статьи: http://www.codeproject.com/KB/HTML/Web-Socket-in-Essence.aspx

...