Web 套接字、长轮询、服务器发送事件和永久帧之间有啥区别?

Posted

技术标签:

【中文标题】Web 套接字、长轮询、服务器发送事件和永久帧之间有啥区别?【英文标题】:What is the difference between web sockets, long polling, server-sent events and forever frame?Web 套接字、长轮询、服务器发送事件和永久帧之间有什么区别? 【发布时间】:2013-10-14 03:21:29 【问题描述】:

我目前正在探索 SignalR,该技术支持传输(网络 wockets、长轮询、服务器发送事件和永久帧)。

我已经理解术语网络套接字和长轮询。但什么是服务器发送事件和永久帧?

这四个有何不同?

【问题讨论】:

所有传输类型的信息可以在asp.net/signalr/overview/getting-started/…asp.net/signalr/overview/getting-started/…的 SignalR 简介文档中找到 【参考方案1】:

SignalR 的传输和回退:

WebSocket Full-duplex

Websocket 是一个基于单个 TCP 连接的全双工通信通道。当服务器和浏览器都支持时,它是在客户端和服务器之间建立真正持久的双向连接的唯一传输。

服务器发送事件 Simplex

也称为 EventSource 是一种浏览器通过 HTTP 连接从服务器接收自动更新的技术。 Server-Sent Events EventSource API 被 W3C 标准化为 html5 的一部分。

永远的框架 One request -> One infinite response

Forever Frame 创建一个隐藏的 IFrame,它向服务器上的端点发出请求未完成。然后服务器不断向客户端发送脚本,该脚本立即执行,提供从服务器到客户端的单向实时连接。从客户端到服务器的连接使用从服务器到客户端连接的单独连接,并且像标准 HTTP 请求一样,为需要发送的每条数据创建一个新连接。

Ajax 长轮询 (One Request -> One Response [but delayed]) repeated

长轮询不会创建持久连接,而是使用在服务器响应之前保持打开状态的请求轮询服务器,此时连接关闭,并立即请求新连接。这可能会在连接重置时引入一些延迟。

更多信息:

https://docs.microsoft.com/en-us/aspnet/signalr/overview/getting-started/introduction-to-signalr https://en.wikipedia.org/wiki/Server-sent_events

【讨论】:

以上是关于Web 套接字、长轮询、服务器发送事件和永久帧之间有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

轮询和 Web 套接字中的连接

WEB揭秘之长连接,短连接,长轮询,短轮询

[当套接字可用时使用HTTP长轮询(例如iPhone,Blackberry)

.NETCOREASP.NET Core SignalR

Web 通信 之 长连接长轮询(转)

Opera 将长轮询套接字打开