回家放羊吧 2022-07-13 23:32 采纳率: 0%
浏览 159
已结题

spring boot集群如何集成websocket?

现在项目有几个接口是通过轮询来查询的现在需要改造成web socket。以前没接触过,现在有几个疑问,望解答

例子:比如商品详情页,评价列表可以实时更新。

1.已有的评价内容也走web socket吗?

2.集群环境下会不会存在重复推送的情况呢?如果有,如何解决呢?

3.网上大多是聊天室demo,现在困惑的地方是,后端如何得知前端需要商品A的评价?如果用户打开了商品A和商品B两个页面,如何区分推送呢?

  • 写回答

7条回答 默认 最新

  • eq0284 2022-07-14 10:44
    关注
    获得0.25元问题酬金

    1.评论内容不需要实时刷新,所以不需要websocket,只有聊天窗口,系统消息提醒才需要websocket,评论内容只需要每次用户进入页面时获取就可以。但是可以通过websocket在系统消息处做提醒。

    2.不会,集群的原理是,客户端A,B,C,D分别与集群环境下的主机E,F,建立websocket连接(A->E,B->E,C->E,D->F),集群环境下的E,F共同监听消息队列或者缓存数据库(比如redis)的频道,
    以redis举例:
    当用户A想与D通信时,
    第一步A发送消息到主机E。
    第二步主机E通过redis进行广播,对所有监听频道的主机E,F同时广播。
    第三步主机F收到广播,发现自己与D没有建立链接,消息停止发送,主机E收到广播发现自己与D有链接,发送消息成功。
    由于客户端只能与集群环境的唯一一台主机建立连接,所以不会针对客户端发送多条消息。

    3.websocket消息分为一对一,一对多模式。
    用户在客户端接收消息是属于一对多模式,由系统群发商品被评论的消息,不需要根据页面进行分别推送。
    第一,用户是客户端,一定与集群环境的一台主机建立的websocket链接。
    第二,当用户C打开商品A,B页面,如果用户D评论A,D通过他的websocket连接将信息发送至服务端,服务端通过群发消息,即向C,D群发A被评论的信息,
    如果还有用户E也打开了商品A页面,他也能收到
    第三,消息内容可以定义(D评论了A),所以D客户端可以选择性过滤,不接收此消息。

    推荐一款可做websocket集成的框架,在gitee上star已达5.1k,bug较少,稳定性较高。并且具有强制下线客户端,客户端登录唯一性控制等功能
    CIM是一套基于netty框架下的推送系统,或许有一些企业有着自己一套即时通讯系统的需求,那么CIM为您提供了一个解决方案,目前CIM支持websocket,android,ios,桌面应用,系统应用等多端接入支持,可应用于移动应用,物联网,智能家居,嵌入式开发,桌面应用,WEB应用以及后台系统之间的即时消服务

    评论

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 创建了问题 7月13日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看