2011-06-25 8 views
0

私のphp websocketサーバーをnode.jsにページングしても、私のハンドシェイクが失敗する理由はわかりません!ここに私のコードは次のとおりです。node.js websocketハンドシェイクdraft-hixie-thewebsocketprotocol-76が動作しません!

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

誰かがアイデアを持っている場合、私は面白がってされるだろう:)しようと試みハンドシェーク方式とがそのOKのV76仕様で与えられた例で、このコードを。

+0

なぜsocket.ioを使用しないのですか? – Raynos

+0

何がうまくいかない? –

+0

サーバーからのHSが送信された後、有効なWS接続と切断を持つChromeとFF。 – ayk

答えて

2

詳細については、phpwebsocketを参照してください。

最新のWebSocketプロトコルバージョン[draft-ietf-hybi-thewebsocketprotocol-09では、ハンドシェイクメカニズムが更新されました.1つの "Sec-WebSocket-Key"しかありません。改訂されたハンドシェイクの詳細については、メカニズムから私の記事:http://www.codeproject.com/KB/HTML/Web-Socket-in-Essence.aspx

関連する問題