Page 258 - Web性能权威指南
P. 258
=> 请求
GET /stream HTTP/1.1 ➊
Host: example.com
Accept: text/event-stream
<= 响应
HTTP/1.1 200 OK ➋
Connection: keep-alive
Content-Type: text/event-stream
Transfer-Encoding: chunked
retry: 15000 ➌
data: First message is a simple string. ➍
data: {"message": "JSON payload"} ➎
event: foo ➏
data: Message of type "foo"
id: 42 ➐
event: bar
data: Multi-line message of
data: type "bar" and id "42"
id: 43 ➑
data: Last message, id "43"
➊ 客户端通过 EventSource 接口发起连接
➋ 服务器以 "text/event-stream" 内容类型响应
➌ 服务器设置连接中断后重新连接的间隔时间(15 s)
➍ 不带消息类型的简单文本事件
➎ 不带消息类型的 JSON 数据载荷
➏ 类型为 "foo" 的简单文本事件
➐ 带消息 ID 和类型的多行事件
➑ 带可选 ID 的简单文本事件
以上事件流协议很好理解,也很好实现:
• 事件载荷就是一或多个相邻 data 字段的值;
• 事件可以带 ID 和 event 表示事件类型;
• 事件边界用换行符标识。
在接收端,EventSource 接口通过检查换行分隔符来解析到来的数据流,从 data 字
246 | 第 16 章