HTML5服务器端事件:EventSource vs. wrapped WebSocket

HTML5 Server-Side Event: EventSource vs. wrapped WebSocket

本文关键字:vs wrapped WebSocket EventSource 服务器端 事件 HTML5      更新时间:2023-09-26

是HTML5服务器发送事件(SSE) API只是一个受限制的,基于事件的API在HTML5 WebSockets?

在我看来,一个EventSource只是一个WebSocket

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

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

我想象异步事件模型在与Node结合时会工作得很漂亮,但在我的ASP中没有看到很多用例。净的世界。

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

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

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

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

服务器发送事件也有更广泛的浏览器支持,到今天为止,支持Safari(只支持旧版本的web Sockets)和Opera(默认禁用web Sockets,并使用旧版本)。

阅读更多关于服务器发送事件的流更新。

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

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

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

一个主要的区别是安全模型。使用WebSockets,默认是允许任何人连接。拒绝连接必须在服务器端完成,基于Origin头。

另一方面,

SSE更接近HTTP并使用同源策略。默认情况下,您只能向相同的主机和端口发出请求。将来可以使用CORS发出跨域SSE请求。到目前为止,浏览器还没有实现这个功能。

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