2011-11-16 28 views
2

我試圖讓插座使用Chrome 16的工作,其採用最新的協議是: http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17鉻16的WebSockets hybi-17

服務器如何使用Node.js和繼承人代碼:

var http = require('http'), net = require('net'), crypto = require('crypto'); 

var server = http.createServer(function (req, res) { 
    console.log(req); 
}); 

server.on('connection', function (stream) { 
    stream.setEncoding('utf8'); 
    stream.setTimeout(0); 
    stream.setNoDelay(true); 
    stream.on('data', function (data) { 
     console.log(data); 
     console.log("****Incoming****\r\n" + data);  
     var securyPattern = /Sec-WebSocket-Key: (.*)/g; 
     var key = securyPattern.exec(data); 
     var magic = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; 
     var sha1 = crypto.createHash('sha1'); 
     sha1.update(key[1] + magic); 
     var accept = sha1.digest('base64'); 
     var response = "HTTP/1.1 101 Switching Protocols\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: " + accept; 

     stream.write(response); 
     console.log("****Outgoing****\r\n" + response); 
    }); 
}); 

server.listen(1337, 'xxxxxxx.no-ip.info'); 

no-ip.info是我的知識產權,我用我的網絡服務器,這工作正常的地址。

腳本標籤內的瀏覽器(客戶端)代碼的頭裏面:

window.onload = function() { 
    var myWebSocket = new WebSocket("ws://xxxxxxx.no-ip.info:1337/"); 

    myWebSocket.onopen = function(evt) { 
     alert("open"); 
     console.log("WebSockets connection opened"); 
     myWebSocket.send("a test message"); 
    }; 

    myWebSocket.onmessage = function(evt) { 
     console.log("Got WebSockets message: " + e.data); 
    }; 

    myWebSocket.onclose = function(evt) { 
     console.log("WebSockets connection closed"); 
    }; 
}; 

的的OnOpen功能永遠不會觸發時,我發現大多數代碼在這裏計算器,但改變,從而將與合作最新的協議,有沒有人知道代碼有什麼問題? (當我連接它時,確實會在CMD中打印發送給它的數據,但是在Chrome控制檯中它只是表示關閉連接(從不打開)。

+0

如果爲'myWebSocket.onerror'定義函數,您會得到什麼? – artlung

+0

它也沒有被觸發:/ –

回答

4

我不知道node.js,所以它可能會這個給你,但是......

與\ r \ n \ r \ n應不是你的反應結束?在它看起來像你的接受頭缺少\ r \ n最起碼......

+1

嗨。這是問題,現在它連接。 我曾嘗試過\ r \ n這顯然不夠。非常感謝 –

0

我懷疑你的迴應是缺少一個網絡套接字協議報頭。如果客戶端發送的協議列表(1或更多),那麼服務器必須選擇一個,並在響應返回。

而且,你的反應應該結束「\ r \ n \ r \ n」。

0

你試過看看http://socket.io?具有節點模塊和前端

+1

看起來很有趣,但我找不到任何下載鏈接,我現在正在使用Windows,我該如何安裝它? –

+0

您可以使用節點包管理器NPM嗎? http://npmjs.org/ - AFAICT,Windows上的節點仍在整理中。 –