Page 260 - Web性能权威指南
P. 260

GET /stream HTTP/1.1 ➌
                   Host: example.com
                   Accept: text/event-stream
                   Last-Event-ID: 43
                   <= 响应
                   HTTP/1.1 200 OK ➍
                   Content-Type: text/event-stream
                   Connection: keep-alive
                   Transfer-Encoding: chunked
                   id: 44 ➎
                   data: dolor sit amet
               ➊ 服务器将客户端的重连间隔设置为 4.5 s
               ➋ 简单文本事件,ID:43
               ➌ 带最后一次事件 ID 的客户端重连请求
               ➍ 服务器以 'text/event-stream' 内容类型响应
               ➎ 简单文本事件,ID:44

               客户端应用不必为重新连接和记录上一次事件 ID 编写任何代码。这些都由浏览器
               自动完成,然后就是服务器负责恢复了。值得注意的是,根据应用的要求和数据流,
               服务器可以采取不同的实现策略。

               •   如果丢失消息可以接受,就不需要事件 ID 或特殊逻辑,只要让客户端重连并恢
                 复数据流即可。
               •   如果必须恢复消息,那服务器就需要指定相关事件的 ID,以便客户端在重连时报
                 告最后接收到的 ID。同样,服务器也需要实现某种形式的本地缓存,以便恢复并
                 向客户端重传错过的消息。
               当然,像要保留多少条消息这种细节一定取决于具体的应用。另外,要知道 ID 是
               可选的事件流字段。而服务器也可以在交付的事件流中对特定消息设置检查点或者
               里程碑标记。一句话,根据你的需求,实现服务器逻辑。


               16.3 SSE使用场景及性能


               SSE 是服务器向客户端发送实时文本消息的高性能机制:服务器可以在消息刚刚生
               成就将其推送到客户端(低延迟),使用长连接的事件流协议,而且可以 gzip 压缩
              (低开销),浏览器负责解析消息,也没有无限缓冲。再加上超级简单的 EventSource
               API 能自动重新连接和把消息通知作为 DOM 事件,使得 SSE 成为处理实时数据不
               可或缺的得力工具!



               248   |   第 16 章
   255   256   257   258   259   260   261   262   263   264   265