服务端推送技术 SSE 的无痛升级实践

阅读时长 3 分钟读完

SSE (Server-Sent Events) 是一种轻量级的服务器推送技术,通过 HTTP 连接实现服务器向客户端的持续数据流传输。传统的 SSE 实现在数据流发生变化时,直接将变化的数据发送到连接的客户端。然而,当需要推送的数据量十分庞大时,这种方式会占用过多的服务器资源,从而影响其他服务的正常使用。因此,引入队列机制是提高 SSE 推送效率的关键。

引入队列机制

队列机制是一种基于消息中间件的消息传递方式,包含生产者和消费者两个部分。在 SSE 推送中,服务器将发送的数据压入消息队列,然后由消费者实时处理队列中的消息,从而实现较高效率的 SSE 推送。

消费者实现

消费者需要通过客户端与消息中间件连接,以获得队列中的消息。其中,STOMP 协议是一种应用于消息中间件的二进制协议,它通过使用 SUBSCRIBE、UNSUBSCRIBE、SEND 等命令,实现客户端与消息中间件的交互。

-- -------------------- ---- -------
-- -- ----- ---------
--- ------ - --- ---------------------------------------------
----------- - -------------------
----------------------- -------- ------- -
  ----------------------- - - -------
  
  -- ------
  ---------------------------------------- -------- --------- -
    --------------------------------------
  ---
-- -------- ------- -
  ------------------ ----- - - -------
---

消费者在接收到消息队列中的数据之后,需要渲染到前端页面上,与传统的 SSE 相同。

发送消息实现

与传统 SSE 不同,SSE 队列机制主要是通过客户端发送消息的方式触发推送。发送消息的方式有多种,其中使用 Spring Boot 集成 STOMP 实现服务器推送的方式比较常见。

-- -------------------- ---- -------
-----------
------ ----- ------------------ -

-----------
-------- --------------------- ------------------

----
-- ----
---
------------------------
--------------
------- ---- ------------- -
----------------------------------------------------- ------- ---------
--
-

在接收到请求时,服务器使用 messagingTemplate.convertAndSend() 方法将消息推送到 STOMP 消息中间件。前端消费者通过订阅消息队列,并实时接收到推送过来的数据。

总结

本文介绍了如何通过引入队列机制,实现对传统 SSE 方案的无痛升级。消费者可以通过连接消息中间件,实时处理从队列中传来的数据;服务端可以使用 STOMP 消息协议发送推送数据,使得传统 SSE 能够更好地适应大并发、大数据量的场景。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647ec34948841e9894e72565

纠错
反馈