gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:33:24 26 4
gpt4 key购买 nike

我目前正在体验 Websockets。

通过查看一些活跃的项目/实现,如 einaros/ws(以及其他项目),我发现他们自己实现了服务器。而不是使用提供 tcp 服务器的 Node 网络模块。这种方法有什么理由吗?

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 之上分层的协议(protocol)。

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

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

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

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

关于node.js - 为什么 nodejs WebSocket 实现不使用 net.Server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14172674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com