我試圖讓插座使用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控制檯中它只是表示關閉連接(從不打開)。
如果爲'myWebSocket.onerror'定義函數,您會得到什麼? – artlung
它也沒有被觸發:/ –