3

HTML5 服务器发送事件 (SSE) API 是否只是 HTML5 WebSockets 之上的受限、基于事件的 API?

在我看来, anEventSource只是一个WebSocket

  1. 不能.send()数据
  2. 使用text/event-stream格式
  3. 触发动态命名(服务器定义)的事件,而不是onmessage

Web 服务器将事件推送到客户端设备的想法非常有趣。这个 API 有什么吸引力吗?

我想异步事件模型在与 Node 结合使用时会很漂亮,但在我的 ASP.NET 世界中并没有看到很多这样的用例。

4

2 回答 2

7

服务器发送事件在只需要服务器推送的应用程序中很有用,而 Web 套接字适用于需要双向快速通信的应用程序。

服务器发送事件是一个很好的解决方案的示例是:

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

Server Sent Events 做了一些 Web Sockets 没有内置的事情,比如自动重新连接eventIDs

迄今为止,服务器发送事件还具有更广泛的 Web 浏览器支持,支持 Safari(仅支持旧版 Web Sockets)和 Opera(默认禁用 Web Sockets,并使用旧版草稿)。

阅读有关使用服务器发送事件的流更新上的服务器发送事件的更多信息。

于 2011-12-14T09:59:08.527 回答
5

除了 Jonas 所说的,协议完全不同。

  • The WebSocket Protocol(RFC 6455) 以 HTTP 连接开始,然后使用握手将连接升级到新协议。这是一个使用框架、消息类型等的二进制协议。

  • Server-Sent Events是一个长时间运行的 HTTP 请求,保持打开状态。服务器以简单的基于文本的格式(UTF-8编码)发送消息,由 . 分隔\n\n。消息具有字段event(事件类型)、dataid,并且可以选择包含注释。

一个主要区别是安全模型。使用 WebSockets,默认设置是让任何人连接。必须在服务器端根据Origin标头拒绝连接。

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

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

于 2012-01-10T08:13:26.117 回答