在Comet和Websockets中打开连接的区别



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

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

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

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

首先,让我们澄清一下Comet有两种风格:HTTP流和HTTP长轮询。你说的是长轮询。(参见另一个术语答案)。

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

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

相关内容

  • 没有找到相关文章

最新更新