2011-12-14 138 views
3

HTML5服务器发送的事件(SSE)API仅仅是基于事件的受限制的API,位于HTML5 WebSockets之上?HTML5服务器端事件:EventSource与封装的WebSocket

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

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

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

我想象异步事件模型在与Node耦合时会很好用,但在ASP.NET世界中没有看到很多用例。

回答

7

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

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

  • 股票价值的变化
  • 新闻Feed

服务器发送的事件做一些没有内置在网站更多的事情插座,如自动重新连接eventIDs

到目前为止,在Safari中支持服务器发送的事件(仅支持Web套接字的早期草稿)和Opera(默认情况下禁用Web套接字,并使用较旧的草稿)。

了解更多关于服务器发送事件Stream Updates with Server-Sent Events

5

除了乔纳斯所说的,协议是完全不同的。

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

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

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

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

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