背景
最近在刷 Twitter 的时候,发现 Twitter 会实时更新已加载页面的内容,以为是 Websocket,看了下请求发现是 Server-sent events,之前没有了解过这个,今天来学习一下。
Server-sent events
引用维基百科:
Server-Sent Events (SSE) is a server push technology enabling a client to receive automatic updates from a server via HTTP connection. The Server-Sent Events EventSource API is standardized as part of HTML5[1] by the W3C.
SSE 通常与 Websocket 相比较:
- SSE 提供单向通信,Websocket 提供双向通信;
- SSE 是通过 HTTP 协议实现的,Websocket 是单独的协议;
- 实现上来说 SSE 比较容易,Websocket 复杂一些;
- 对浏览器来说,IE/Edge 不支持 SSE,其它的都是支持的。
- SSE 有最大连接数限制
- WS 可以传输二进制数据和文本数据,而 SSE 只有文本数据
SSE 使用场景:
- 股票行情自动收录
- 社交网站自动更新(Twitter)
- …
Websocket 使用场景:
- VNC
- 协同编辑
- …
使用
Golang 有 eventsource 可以直接使用,示例如下:
Server
1 | package main |
Client
1 |
|
总结
SSE 很适合 Twitter 这种场景,还特意观察了下微博,发现微博没有。。