Comet 和 Websockets 中打开连接的区别

Open connection difference in Comet and Websockets

我试图了解 Websocket 和 Comet 模型的区别。据我了解,

在彗星模型中,连接保持打开状态,直到服务器有东西要推送给客户端。服务器将数据推送到客户端后,连接将关闭,并为下一个请求建立新连接。 这不是一个好的方法,因为连接可能会长时间保持打开状态(导致大量使用服务器资源)或可能超时。

另一方面,websockets 以握手连接开始,一旦客户端和服务器都同意交换数据,连接将保持打开状态。

所以在这两种情况下,连接都会长时间保持打开状态(尤其是 websocket)。 所以这不是websocket保持连接打开的缺点吗我想参考asp.net中的SignalR讨论这个概念。

首先,让我们澄清一下 Comet 有两种类型:HTTP 流和 HTTP 长轮询。你指的是长轮询。 (有关术语,请参阅 this other answer)。

在所有三种情况(WebSocket、HTTP 流和 HTTP 长轮询)中,底层 TCP 套接字都保持打开状态。这实际上是这种技术的主要特点,而不是副作用。您希望套接字保持永久打开状态(我现在过于简单化了),以便可以异步和低延迟推送数据。

正如您所说的那样,这意味着服务器必须能够处理大量打开的套接字而不浪费资源。这是选择好的 Comet/WebSocket 服务器的关键因素之一。