3

I am currently experiencing with Websockets.

By reviewing some active projects/implementations like einaros/ws (and others as well) I found out that they implement the server their own. Instead of using the node net module which provides a tcp server. Is there a reason for this approach?

https://github.com/einaros/ws/blob/master/lib/WebSocketServer.js

Regards

Update:

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');
});
4

1 回答 1

7

WebSocket 的 aa 协议位于普通 HTTP 之上。

它的工作原理基本上是浏览器发送一个UPGRADEHTTP 请求,然后利用 HTTP 1.1 保持活动功能来保持 HTTP 连接的底层 TCP 套接字打开。

然后通过WebSocket 协议(链接后面相当大的 RFC)发送数据,该协议本身建立在 TCP 之上。

由于需要 HTTP 部分,并且您需要重新使用该部分的 TCP 连接,因此使用普通 HTTP 服务器而不是net.Server. 否则,您必须自己实现 HTTP 处理部分。

在任何一种情况下都需要实现 WebSocket 协议,并且由于任何 HTTP 连接都可以升级,理论上,您可以简单地将 WebSocket“服务器”连接到端口 80 上的普通 HTTP 服务器,从而处理普通 HTTP 请求和同一端口上的 WebSocket。

于 2013-01-05T14:42:15.603 回答