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)封装,带有长度、掩码等字段后再发送。注意这只是协议封装,并没有加密,内容仍然是明文;需要保密时仍应使用 wss/TLS。

 

参考资料: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 实现

posted on 2012-01-07 13:48  Easy C#  阅读(3795)  评论(0)    收藏  举报