javascript - HTML5 服务器发送事件 : technical details?

标签 javascript html server-sent-events

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

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

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

最佳答案

它更像是 forever frame 的编纂比长轮询,依靠 chunked transfer encoding而不是保持连接打开直到数据准备好。事件中发送的数据只是文本,尽管该文本当然可以是 HTML,但这取决于您的应用程序如何使用它执行适当的操作。事件流中的项目如下所示:

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

在浏览器中,当它收到此 block 时,您会在 EventSource 上看到一条事件 消息,您可以使用熟悉的 addEventListener("message"捕获该消息,回调) 方法。

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

附注技术详情are all in the spec

关于javascript - HTML5 服务器发送事件 : technical details?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13361724/

相关文章:

javascript - 如何将返回的 Firebase 元素数组绑定(bind)到我的 AngularJS View (通过 Controller )?

javascript - javascript 如何检查字符串开头是否有空格

javascript - 如何在 SharedWorker 中启动服务器发送事件 "only once"以推送任何打开脚本的消息?

java - Spring sseEmitter,调用方法发送后不会立即发送事件

javascript - 如何使用 jquery/javascript && 重置 html 中的表单数据以及如何使用 jquery 将表单数据发送到电子邮件?

Scala:避免可变实例变量

javascript - 为什么 onchange 事件不会在 angular js 中触发?

javascript - 将文本单词换行

javascript - 我们可以使用phonegap 在 HTML5 和 javascript 中访问 Android 设备的 native 内容,例如联系人列表、相机图片等吗?

html - CSS:剪裁时删除整个元素