我目前正在使用Websockets。
通过审查一些活跃的项目/实现,如einaros/ws(以及其他),我发现他们实现了自己的服务器。而不是使用提供tcp服务器的node net模块。这种做法有什么原因吗?
https://github.com/einaros/ws/blob/master/lib/WebSocketServer.js对
更新:
var server = net.createServer(function(c) {
c.on('data', function(data) {
// data is a websocket fragment which has to get parsed
});
// transformToSingleUtfFragment is building a websocket valid
// byte fragment which contains hello as application payload
// and sets the right flags so the receiver knows we have a single text fragment
c.write(transformToSingleUtfFragment('hello'));
c.pipe(c);
});
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});
WebSocket是一个在普通HTTP之上分层的协议。
它的工作原理基本上是浏览器发送一个UPGRADE
HTTP请求,然后利用HTTP 1.1保持存活功能来保持HTTP连接的底层TCP套接字打开。
数据然后通过WebSocket协议(链接后面相当大的RFC)发送,它本身是建立在TCP之上的。
由于HTTP部分是必需的,并且您需要重用来自该部分的TCP连接,因此使用普通HTTP服务器而不是net.Server
是有意义的。否则,您必须自己实现HTTP处理部分。
实现WebSocket协议需要在两种情况下完成,因为任何HTTP连接都可以升级,理论上,你可以简单地连接你的WebSocket"服务器"。