Server Sent Event是W3C定义的一个HTTP之上的应用。主要是通过指定HTTP的MIME为text/event-stream,来让服务端通知客户端一些事件。这是服务端发起的到客户端的单向事件流。

客户端,也就是浏览器,通过提供一个DOM对象,来让客户端脚本能够方便侦听和处理服务端所发送的事件:

var source = new EventSource('updates.cgi');
source.onmessage = function (event) {
  alert(event.data);
};

因为HTTP 1.1主要是以文本为主,所以服务端发送的事件数据也是通过文本的方式来组织的:

data: This is the first message.

data: This is the second message, it
data: has two lines.

data: This is the third message.

每个data是一个HTTP信息头,用来传送一个事件。HTTP信息头都是独处一行的,data和紧邻的data同属于一个事件,事件和事件之间通过换行来进行间隔。上面的例子中有三个事件。

除了data之外,还有其他几个信息头可以配合使用:

  • event,用来添加事件类型
  • id,用来指定事件的id,当客户端断了重连时必须提供最近一次收到的id
  • retry,用来指定连接的重连事件,以毫秒为单位

除了上面的信息头以外,事件的其他信息头会被无视……,就是这么简单。

W3C Server-Sent Events Server-sent events

https://wikitech.wikimedia.org/wiki/Event_Platform/EventStreams

(本篇完)