websocket多实例推送解决方案-数据实时展示

这篇具有很好参考价值的文章主要介绍了websocket多实例推送解决方案-数据实时展示。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求

  需要前端展示实时的订单数据信息。如下图所示,实时下单实时页面统计更新展示

websocket多实例推送解决方案-数据实时展示

 

思路方案

  前端使用websocket 建立通信  

  后端监听数据库的binglog变更,实时得到最新数据,推送到前端 

  

现状及问题

客户端想实现实时获取数据的变更,使用了websocket+kafkaMq,当数据库变更的时候,通过mq发送变更信息到队列,服务端消费。

由于客户端与服务端websocket连接,是单台服务器建立通道,数据库变更到服务器消费,只会是其中一台服务器消费,其他服务器消费不到,导致其他服务器连接的客户端,接收不到实时的数据。

websocket多实例推送解决方案-数据实时展示

websocket多实例推送解决方案-数据实时展示

解决方案

根据以上问题,目前发现四个解决方案

方案名

描述

优缺点

改动点

redis+定时

当服务器A消费时,在redis里存下所需推送的全部信息

所有服务器都启动一个定时器,定时遍历redis中需要推送的,根据当前服务器socket的连接,推送对应客户端

优点:在消费成功以及存redis成功后,可以保证实时数据不丢失,都能推到

缺点:

有定时,伪实时,处理逻辑相对复杂

每台服务器都遍历一次所有的数据,资源浪费

增加定时器,在定时器里根据redis里存的实时数据,一一推送到与本服务器连接的客户端

kafka多个消费组

目前所有服务器都配置了同一消费组,kafka推送的时候,若是在同一分组则只推其中一个,可以考虑把每个服务器的分组按照ip+分组名来分组,形成,一个服务器是一个分组,则可以都推送到

优点:广播形式,推送到所有服务器,实时性有保证,消息不易丢失

缺点:

每台服务器都消费所有数据,资源浪费

修改基础组件,或者新写消费者代码中分组部分

rocketMq队列

数据库变动时,通过rocketMq队列发送消息,rocketMq支持广播形式

优点:广播形式,推送到所有服务器,实时性有保证,消息不易丢失

缺点:

每台服务器都消费所有数据,资源浪费

 

1、接收到数据库变更信息后,发送mq

2、增加rocketMq消费业务代码实现

redis发布订阅

每个服务器通过redis都订阅固定频道的消息

当某个服务器得到数据库变更时,在redis里存好实时数据,然后再在redis频道发送变更的key

所有服务器里订阅到消息后,根据key查询redis中实时数据,推送到客户端

优点:redis广播,实时性有保证,轻量,易实现

缺点:

每台服务器都消费所有数据,资源浪费

若redis因为网络不稳定,会导致没有订阅到,消息易丢失,不保证消息必达

1、增加redis订阅频道

2、消费处增加发送频道信息功能

方案流程图

redis+定时

websocket多实例推送解决方案-数据实时展示

kafka多个消费组

websocket多实例推送解决方案-数据实时展示

rocketMq队列

websocket多实例推送解决方案-数据实时展示

redis发布订阅

websocket多实例推送解决方案-数据实时展示

优化

  根据以上方案,发现一个统一的优化点,即每台服务器都会遍历实时数据,不够精准,后期可以通过,redis和分组里加ip来,相对精准推送。。

后记

  主要是提供一个思路,漏洞或许也很多,欢迎大家不吝赐教。

参考

 

  websocket 详解:https://blog.csdn.net/weixin_50339217/article/details/125160323

  websocket 集群处理方案:https://www.cnblogs.com/yangjl01/p/12740836.html

  监听数据库变化参考:

      https://blog.csdn.net/Zxb654614425/article/details/129057114

      https://blog.csdn.net/qq_45821251/article/details/127490460

  redis 发布订阅 : https://blog.csdn.net/w15558056319/article/details/121490953

  前端实时更新数据的几种方式:https://www.jianshu.com/p/b7b363e5352a

  其他参考:https://blog.csdn.net/qi923701/article/details/79253779

 文章来源地址https://www.toymoban.com/news/detail-436707.html

到了这里,关于websocket多实例推送解决方案-数据实时展示的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • thinkphp结合WebSocket 实时推送消息详细实例

    实时推送消息是现代 Web 应用程序中常见的一种需求,而 WebSocket 已成为实时通信的首选技术。ThinkPHP 提供了对 WebSocket 的支持,本文将演示如何使用 ThinkPHP 实现 WebSocket 实时推送消息的详细例子。 安装 Swoole 在开始之前,你需要先安装 Swoole 扩展。可以使用以下命令来安装:

    2024年03月20日
    浏览(49)
  • 分钟级实时数据分析的背后——实时湖仓产品解决方案

    随着信息技术的深入应用,企业对市场的响应速度也在不断提升,而且这种响应速度正在变得越来越快,没有最快只有更快。对数据实时性要求的提高,是眼下很多企业遇到的一个新的挑战。 从生产侧的视角来看,系统实时监控与实时健康状态检测已成为确保系统稳定性和可

    2024年02月19日
    浏览(38)
  • websocket实时推送统计数据给前端页面

    前提须知:websocket基本使用 业务场景,每秒推送统计数据给前端页面,分别显示前天,昨天,今天的前十名客户数据 @ServerEndpoint(\\\"/smsMCustomerStaTop10Ws\\\") 定义推送数据给到具体的连接标识 以上 onOpen() 方法最终触发的业务方法 smsMonitorService.pushSmsMCustomerStaTop10(); 以上 smsMonitorMapper.findSm

    2024年02月15日
    浏览(45)
  • webSocket实现数据的实时推送(附:前后端代码)

            之前开发的一个管理系统项目中,首页是数据大屏展示,一开始我是用JS的 setInterval() 方法,设置一个时间,每过时间发起一次 ajax 请求。虽然也能凑活着用,但总感觉不是最优的方法,而且还比较占用资源,所以学习 WebSocke ,以下是本人的一些学习心得及前后端的

    2024年02月02日
    浏览(50)
  • 【Spring Boot 实现 WebSocket实时数据推送-服务端】

    一、WebSocket配置类 二、WebSocket服务端类 三、WebSocket的连接池类 四、启动Spring Boot服务 五、测试WebSocket连接 WebSocket在线测试工具: http://www.easyswoole.com/wstool.html 测试连接 服务地址:ws://172.18.42.29:14785/endPoint/1 服务启动的IP:172.18.42.29 服务端口:14785 WS的URl:/endPoint 入参:1 六

    2023年04月25日
    浏览(38)
  • WebSocket:实现实时互动、数据推送的利器,你了解多少

    WebSocket技术是一种基于TCP协议的全双工通信协议,它允许浏览器和服务器之间进行实时、双向的通信。相比传统的HTTP请求-响应模式,WebSocket提供了持久连接,可以实时地推送数据,减少了通信的延迟。 WebSocket的工作原理是通过建立一条持久连接来实现实时通信。首先,浏览

    2024年01月18日
    浏览(43)
  • ClickHouse 与 Kafka 整合: 实时数据流处理与分析解决方案

    随着数据量的不断增长,实时数据处理和分析变得越来越重要。ClickHouse 和 Kafka 都是在现代数据技术中发挥着重要作用的工具。ClickHouse 是一个高性能的列式数据库,专为 OLAP 和实时数据分析而设计。Kafka 是一个分布式流处理平台,用于构建实时数据流管道和流处理应用程序

    2024年02月22日
    浏览(48)
  • vue和node使用websocket实现数据推送,实时聊天

    需求:node做后端根据websocket,连接数据库,数据库的字段改变后,前端不用刷新页面也能更新到数据,前端也可以发送消息给后端,后端接受后把前端消息做处理再推送给前端展示 使用node ./app.js运行项目 在需要使用websocket连接的页面引入 默认如下: id为243 在数据库改为

    2024年02月15日
    浏览(46)
  • Vue使用WebSocket实现实时获取后端推送的数据。

    Vue可以使用WebSocket实现实时获取后端推送的数据。 1.在Vue项目中安装WebSocket库 可以使用npm或yarn安装WebSocket库: 2.创建WebSocket连接 在Vue组件中创建WebSocket连接,连接到后端WebSocket服务器,代码如下: 上面的代码中,使用WebSocket连接到后端WebSocket服务器,通过监听onmessage事件,

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包