什么是 SSE 技术
服务器发送事件(Server-Sent Events,简称 SSE)是一种基于 HTTP 的服务器端推送技术,可以实现服务器端向客户端推送消息,而客户端不需要主动发起请求。SSE 技术在前端开发中有广泛的应用,可以用于实现实时消息推送、在线聊天、股票行情等功能。
SSE 技术的核心是使用 EventSource API 与服务器建立长连接,服务器端通过该连接向客户端推送消息。与 WebSocket 技术相比,SSE 技术更加轻量级,适用于一些简单的应用场景。
如何使用 SSE 技术实现消息订阅推送功能
1. 创建 SSE 连接
在客户端使用 JavaScript 代码创建 SSE 连接,代码如下:
const eventSource = new EventSource('/subscribe');
其中,/subscribe
是服务器端推送消息的接口地址。
2. 接收服务器端推送的消息
在客户端监听 message
事件,接收服务器端推送的消息,代码如下:
eventSource.addEventListener('message', event => { console.log(event.data); });
其中,event.data
是服务器端推送的消息内容。
3. 发送消息到服务器端
在客户端通过 XMLHttpRequest
或 fetch
API 发送消息到服务器端,服务器端再将消息推送给客户端。代码如下:
const xhr = new XMLHttpRequest(); xhr.open('POST', '/publish'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.send(JSON.stringify({ message: 'Hello, SSE!' }));
其中,/publish
是服务器端接收消息的接口地址。
4. 服务器端实现消息推送
在服务器端使用 SSE 技术推送消息到客户端,代码如下:
-- -------------------- ---- ------- ----- ---- - ---------------- ----- ------ - ----------------------- ---- -- - -- -------- --- ------------- - ------------------ - --------------- -------------------- ---------------- ----------- ------------- ------------ --- -------------- -- - ---------------- ----- ---------------------------- -- ------ - ---- -- -------- --- ---------- -- ---------- --- ------- - --- ---- - --- -------------- ----- -- - ---- -- ----------------- --- ------------- -- -- - ----- ------- - ------------------------- -- -------------- ------------------------------- -- - ----------------- ----------------- --- ---------- --- - ---- - ------------------- ---------- - --- ------------------ - --- ------ ----------------------- ---- -- - ----------------------------- ---------------- -- -- - -------------------------------- --- --- --------------------
其中,setInterval
函数定时向客户端推送消息,server.connections
记录所有连接的客户端,conn.write
向客户端推送消息。
总结
SSE 技术可以实现服务器端向客户端推送消息,而客户端不需要主动发起请求。使用 SSE 技术可以实现实时消息推送、在线聊天、股票行情等功能。本文介绍了 SSE 技术的实现原理和使用方法,并提供了示例代码。在实际开发中,可以根据具体需求进行调整和优化。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6507a42d95b1f8cacd2e968d