我试图理解Websocket和Comet模型的区别。据我了解,
在彗星模型中,连接保持打开状态,直到服务器有东西推送到客户端。服务器将数据推送到客户端后,将关闭连接并为下一个请求建立新连接。 由于连接可能会长时间保持打开状态(导致大量使用服务器资源)或者可能会超时,因此不认为这是一种好方法。
另一方面,websockets以握手连接开始,一旦客户端和服务器同意交换数据,连接仍保持打开状态。
因此,在这种情况下,连接长时间保持打开状态(尤其是websocket)。 因此,这不是websocket保持连接打开的缺点。 我想在asp.net中引用SignalR来讨论这个概念。
答案 0 :(得分:1)
首先,让我们澄清Comet有两种形式:HTTP Streaming和HTTP Long Polling。你指的是Long Polling。 (有关术语,请参阅this other answer。)
在所有三种情况下(WebSocket,HTTP Streaming和HTTP Long Polling),底层TCP套接字都保持打开状态。这实际上是这种技术的主要特征,而不是副作用。您希望套接字保持永久打开状态(我现在过于简单化),以便可以异步推送数据并且延迟时间短。
正如您所说,这意味着服务器必须能够处理大量开放套接字而不会浪费资源。这是选择好的Comet / WebSocket服务器的关键要素之一。