WebSocket版本13的实现(Draft17)

网上找了WebSocket几个版本的实现有C#的,Netty的,NodeJS的实现,但都是旧版本(Draft76)的实现,在更新到最新版本的Chrome(16 stable)之后,就无法连接了。

于是在网上找了一些资料和代码拼凑成了最新版本协议的实现。

新版本WebSocket的安全验证方式发生了变化,原来有两个Web-Security-Key现在只有一个了,算法也变了。

原来是从Key1和Key2里面提取数字,空格,字符等,进行MD5运算。

现在变为一个Key字符串,与"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"进行sha-1运算,返回运算结果的base64编码。

数据传输方面也发生了变化,不再是原来的明文传输,数据要进行各种运算,以Packet为单位封装后进行发送。

参考资料:http://blog.csdn.net/les5332295/article/details/7014799

http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17

用旧版本的WebSocket+Socket.io中的WebSocket部分拼凑的版本13(Draft17)实现:

同时可以兼容旧版本的WebSocket协议

示例:

var sys = require('util'),
ws = require('./ws.js')
var sockets = [];
var server = ws.createServer(function (socket) {

socket.addListener("connect", function (resource) {
console.log("client connected from " + resource);
sockets.push(socket);
//socket.write("welcome\r\n")
})

socket.addListener("data", function (data) {
console.log(data);
for(var i=sockets.length-1;i>-1;i--){
sockets[i].write(data)
}

})

socket.addListener("close", function () {
console.log("client left")
})
})

server.listen(8082)

下载:WebSocket Draft 17 实现

原文地址:https://www.cnblogs.com/easyc/p/2315689.html