【问题标题】:Why do nodejs WebSocket implementations not use net.Server?为什么 nodejs WebSocket 实现不使用 net.Server?
【发布时间】:2013-01-05 14:22:15
【问题描述】:

我目前正在使用 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');
});

【问题讨论】:

    标签: node.js tcp websocket


    【解决方案1】:

    WebSocket 是一种在普通 HTTP 之上分层的协议。

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

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

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

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

    【讨论】:

    • 您好,我已经阅读了 RFC,并且我了解 http 服务器处理升级请求的要求。建立连接后,http 服务器实际上并没有对 WebSocket 做任何事情,Websocket 服务器只需要解析和构建片段。现在我认为例如接收到的片段等于数据事件提供的数据。我用一个例子更新了我的问题以查看这个
    猜你喜欢
    • 2011-06-03
    • 2014-01-13
    • 2011-01-13
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2016-09-07
    相关资源
    最近更新 更多