当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 为什么nodejs WebSocket实现不使用net.Server?

来源:互联网 收集:自由互联 发布时间:2021-06-16
我目前正在使用Websockets. 通过回顾一些活跃的项目/实现,如einaros / ws(以及其他人),我发现他们自己实现了服务器.而不是使用提供tcp服务器的节点net模块.这种方法有原因吗? https://githu
我目前正在使用Websockets.

通过回顾一些活跃的项目/实现,如einaros / ws(以及其他人),我发现他们自己实现了服务器.而不是使用提供tcp服务器的节点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 keep alive功能来保持HTTP连接的底层TCP套接字打开.

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

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

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

网友评论