【问题标题】:HTML5 Server sent events: technical details?HTML5 服务器发送事件:技术细节?
【发布时间】:2012-11-13 13:39:28
【问题描述】:

我对 HTML5 的新服务器发送事件的技术背景感兴趣。那里真的发生了什么?

  • 您不需要服务器端的特殊功能 - 只需像往常一样发送数据,例如html
  • HTTP 仍然是一个请求/响应协议。在我看来,新的内容类型“文本/事件流”不会改变这一点

那么这个概念只是“普通旧长轮询”的一个封装版本吗? 另一方面,它通常被描述为与服务器的持久双向连接。在我看来,这会有所不同。我只是想了解这如何在 http 之上工作。

【问题讨论】:

  • 您在哪里见过它被描述为“与服务器的持久、双向连接”?不是。
  • 忘掉“双向”吧……只在一小页上发现,当然只有单向。但是“持久”一词可以在网络上的多个页面上找到。如果它们以合乎逻辑的方式表示“持久”,那么我同意,但我仍然想知道这个概念的背后是什么(是否长时间轮询)。
  • 更多信息请关注HTML5Rocks

标签: javascript html server-sent-events


【解决方案1】:

它更像是对forever frame 的编码,而不是长轮询,它依赖于chunked transfer encoding,而不是在数据准备好之前保持连接打开。事件中发送的数据只是文本,尽管该文本当然可以是 HTML,但由您的应用程序来使用它来做适当的事情。事件流中的项目如下所示:

event: message
data: Any text data you want goes here

在浏览器中,当它接收到这个块时,您会在EventSource 上看到一个事件message,您可以使用熟悉的addEventListener("message", callback) 方法捕获该事件。

与永久帧(或长轮询)相比的主要优点是标准化接口(因此基本上,不值得更新现有的工作代码),与Web Sockets 相比的主要优点是它可以在廉价的共享主机上正常工作不允许长时间运行的进程。

附:技术细节are all in the spec

【讨论】:

    最近更新 更多