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 章
   253   254   255   256   257   258   259   260   261   262   263