23

这更像是一个 n00b 问题,但我从来没有真正知道答案。

那么为什么我们需要 websockets 协议呢?

并且,与彗星式/长轮询/悬挂式 GET 式使用 HTTP 相比有什么优势?

4

4 回答 4

19

Comet 和 Ajax 都可以提供最终用户体验,提供类似桌面的功能和低用户感知延迟,只有 Web Sockets 才能兑现承诺,提供一种本机手段,以可忽略不计的延迟准确有效地将事件流式传输到浏览器和从浏览器流出.

通过轮询,它会发出不必要的请求,因此,在低消息率的情况下会不必要地打开和关闭许多连接。(与轮询一样,它会定期发送 HTTP 请求并立即收到响应。)

Web Sockets 消除了开销并显着降低了复杂性。

于 2010-09-01T11:50:10.023 回答
12

1-WebSocket 是一种天然的全双工、双向、单套接字连接。使用 WebSocket,您的 HTTP 请求成为打开 WebSocket 连接的单个请求,并重用从客户端到服务器以及从服务器到客户端的相同连接。

2-WebSocket 减少延迟。例如,与轮询不同,WebSocket 发出单个请求。服务器不需要等待来自客户端的请求。同样,客户端可以随时向服务器发送消息。这个单一的请求大大减少了轮询的延迟,轮询会每隔一段时间发送一个请求,而不管消息是否可用。

3-WebSocket 使实时通信更加高效。您始终可以通过 HTTP 使用轮询(有时甚至是流式传输)来通过 HTTP 接收通知。但是,WebSocket 节省了带宽、CPU 功率和延迟。WebSocket 是性能上的创新。

4-WebSocket 是一种底层网络协议,使您能够在其之上构建其他标准协议。

5-WebSocket 是为 HTML5 应用程序提供高级功能以与其他平台竞争的努力的一部分。

6-WebSocket 是关于简单的

于 2013-07-06T20:14:04.310 回答
2

这是一篇关于websocket优于 websocket.org 轮询的文章

于 2012-01-13T15:20:42.203 回答
0

目前尚不清楚我们是否确实需要它们。在向客户端推送事件的场景下,页面可以循环发出普通的 AJAX GET 请求,服务器可以“挂起”直到有事件可用。在经过一些超时后,服务器可以返回“无事件”响应,以便客户端重新连接。在连接打开和客户端等待响应期间,有一个有效的从服务器返回客户端的推送通道。

可以调整超时时间以减少不必要的重新连接,尽管它通常不能是无限的,因为如果服务器端进程看起来挂起太久,大多数服务器框架将终止它。

鉴于这种现有的能力,问题是:一个新的通信框架真的比已经可以做的事情增加了显着的价值吗?它不会真正实现无法完成的事情。它只会稍微改善它。

于 2010-09-01T12:07:23.893 回答