什么是 Server-sent Events(SSE)?
Server-sent Events(SSE)是一种浏览器与服务器之间实现实时通信的技术。它允许服务器向客户端发送数据流,而无需客户端发起请求。
SSE是基于HTTP协议的,与WebSockets相比,SSE是一种轻量级的技术,适用于一些简单的实时通信场景。
使用场景
SSE适用于一些需要实时更新数据的场景,例如:
- 股票价格实时更新
- 比赛结果实时更新
- 在线聊天室实时通信
- 在线游戏实时更新
优点
相比于传统的轮询方式,SSE有以下优点:
- 实时性更高:SSE的数据是实时推送给客户端的,不需要客户端不断发起请求。
- 节省带宽:SSE只有在有数据更新时才会发送数据,不会像轮询一样频繁发送请求。
- 简单易用:SSE只需要浏览器支持即可,不需要像WebSockets一样需要额外的握手过程。
实现
服务端
在服务端,我们需要设置响应头,告诉浏览器返回的数据是SSE格式的:
res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' });
然后,我们可以使用Node.js的EventEmitter来实现数据的实时推送:
-- -------------------- ---- ------- ----- ------------ - ------------------ ----- ------- - --- --------------- -------------- -- - ---------------------- --- ---------------------- -- ------ ------------------- ----- ---- -- - ------------------ - --------------- -------------------- ---------------- ----------- ------------- ------------ --- ----- -------- - ------ -- - ---------------- -------------- - -------------------- ---------- --------------- -- -- - --------------------- ---------- -- ---
在上面的代码中,我们使用setInterval模拟数据的实时更新,然后使用EventEmitter来实现数据的实时推送。
客户端
在客户端,我们可以使用JavaScript来订阅服务端的数据:
const source = new EventSource('/updates'); source.onmessage = (event) => { console.log(event.data); }
在上面的代码中,我们使用EventSource来订阅服务端的数据,然后在onmessage回调函数中处理数据。
总结
Server-sent Events(SSE)是一种浏览器与服务器之间实现实时通信的技术,适用于一些需要实时更新数据的场景。相比于传统的轮询方式,SSE具有实时性更高、节省带宽、简单易用等优点。在实现上,我们需要在服务端设置响应头,告诉浏览器返回的数据是SSE格式的,然后使用EventEmitter实现数据的实时推送;在客户端,我们可以使用EventSource来订阅服务端的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/660f8dcbd10417a22201a3d6