HTML5 服务器端事件:EventSource 与封装的 WebSocket 比较

3
HTML5的服务器推送事件(Server-Sent Events,SSE)API只是在HTML5 WebSockets之上的一种受限制的基于事件的API吗?
在我看来,“EventSource”只是一个“WebSocket”,其有以下特点:
1. 无法使用“.send()”方法发送数据 2. 使用“text/event-stream”格式 3. 动态命名(由服务器定义)事件而不是使用“onmessage”
Web服务器向客户端设备推送事件的想法非常有趣。这个API是否有任何应用?
我想象异步事件模型与Node结合使用时能够非常完美地工作,但在我的ASP.NET世界中并没有看到很多使用案例。
2个回答

7

在只需要 服务器推送 的应用程序中,Server Sent Events 很有用,而 Web Sockets 则适用于需要快速双向通信的应用程序。

以下是适合使用 Server Sent Events 的一些示例:

  • 股票价值变化
  • 新闻提要

Server Sent Events 做了一些 Web Sockets 中没有内置的其他事情,例如 自动重新连接事件 ID

截至今天,支持 Server Sent Events 的网络浏览器更广泛,包括 Safari(仅支持 Web Sockets 的旧草案)和 Opera(默认禁用 Web Sockets,并使用较旧的草案)。

使用 Server-Sent Events 进行流更新中了解更多关于 Server Sent Events 的知识。


5
除了 Jonas 说的之外,这些协议完全不同。
- WebSocket 协议 (RFC 6455) 开始于 HTTP 连接,然后使用握手将连接升级到新协议。这是一种二进制协议,使用帧、消息类型等。 - Server-Sent Events 是一个长时间运行的 HTTP 请求,保持打开状态。服务器以简单的基于文本的格式(UTF-8 编码)发送消息,由 \n\n 分隔。消息具有事件类型、数据、ID 字段,并可以选择包括注释。 一个主要的区别是安全模型。对于 WebSocket,默认情况下允许任何人连接。拒绝连接必须在服务器端根据 Origin 头执行。

另一方面,SSE更接近HTTP,并使用同源策略。默认情况下,您只能向相同的主机和端口发出请求。在未来,将可以使用CORS进行跨域SSE请求。截至今天,浏览器尚未实现此功能。

这两个协议采用不同的方法,因为它们解决不同的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接