最近在做消息中心模块,想要实现消息实时推送到前端页面展示,直接摒弃了前端定时轮训调用接口来获取消息数据的方式,采用了WebSocket服务端推送。

流程是首先前端跟后端应用新建一个连接,并携带当前登录的用户ID,此时WebSocket会创建一个WebsocketSession来唯一绑定该连接,我们会在后端用Map建立用户ID与Session的映射关系:

Map

后续有新消息到达时,就可以通过该Map映射找到指定用户ID对应的session来推送消息。但有一个问题,后端是多应用节点,每个节点维护一个这样的Map,无法共享WebsocketSession,而且redis也无法对WebsocketSession序列化后进行存储。

方案1:Redis

由于项目目前用到了Redis,所以可以采用Redis的发布/订阅功能来实现WebsocketSession共享问题。

1.新建一个对象,属性有userId, message,用于发送消息

Object(String userId, String message)

2. 当新消息到达时,将消息注册到redis指定topic的频道上

convertAndSent("topicName", new Object(userId, message))

3.每个应用节点都订阅该topic的频道,这样新消息一注册,每个节点都能接收到Object,然后从Object中获取userId,再从映射Map中获取userId对应的WebsocketSession(在哪个节点建立的连接和Map映射关系,就会在哪个节点找到对应的session),进行消息推送。

就这样通过Redis的发布/订阅功能实现session共享。当然在步骤2,新消息到达时,可以先在本节点的Map映射中查找是否有userId对应的session,如果有,直接推送消息,而且不必要再将消息注册到redis中。

方案2:消息队列

消息队列(例如RocketMQ)广播订阅消费方式,也是可靠地方案

分布式下WebSocket Session共享解决方案相关推荐

  1. 分布式架构下,Session 共享有什么方案?

    来自:会点代码的大叔 分布式架构下的 Session 共享,也称作分布式 Session 一致性:分布式架构下 Session 共享有哪些问题,又有哪些解决方案,让我们一起看一下. 01 Sessio ...

  2. 分布式Session共享解决方案

    转载自 分布式Session共享解决方案 Session是服务器用来保存用户操作的一系列会话信息,由Web容器进行管理.单机情况下,不存在Session共享的情况,分布式情况下,如果不进行Sessio ...

  3. Session机制详解及分布式中Session共享解决方案

    Session机制详解及分布式中Session共享解决方案 参考文章: (1)Session机制详解及分布式中Session共享解决方案 (2)https://www.cnblogs.com/jing ...

  4. C#session共享+redis_Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享...

    精品推荐 国内稀缺优秀Java全栈课程-Vue+SpringBoot通讯录系统全新发布! Docker快速手上视频教程(无废话版)[免费] 作者:夜月归途 转载自: https://www.cnblo ...

  5. 集群环境下的Session共享

    一.Cookie机制和Session机制回顾 1)定义:Session成为"会话",具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的 ...

  6. session共享怎么做的(分布式如何实现session共享)?

    session共享怎么做的(分布式如何实现session共享)?  问题描述:一个用户在登录成功以后会把用户信息存储在session当中,这时session所在服务器为server1,那 么用户在 s ...

  7. 分布式下的session问题

    分布式下的session 在分布式项目下 项目中使用 在分布式项目下 session是一种会话状态,是储存在服务器上的,可以区分每个用户.浏览器会保存着对应的信息.浏览器保存的叫cookie.用户访问 ...

  8. 使用spring session+redis技术,解决负载均衡下的session共享问题

    使用spring session+redis技术,解决负载均衡下的session共享问题 参考文章: (1)使用spring session+redis技术,解决负载均衡下的session共享问题 ( ...

  9. 【微服务之分布式Session】Session机制详解及分布式中Session共享解决方案

    一.为什么要产生Session http协议本身是无状态的,客户端只需要向服务器请求下载内容,客户端和服务器都不记录彼此的历史信息,每一次请求都是独立的. 为什么是无状态的呢?因为浏览器与服务器是使用 ...

最新文章

  1. Road-SLAM:基于道路标线车道级精度SLAM
  2. 自噬相关数据库Human Autophagy Database使用指南
  3. Redox随笔(2)-用Rust语言编写的类UNIX操作系统
  4. jQuery零基础入门——(三)层级选择器
  5. 创龙28377d历程_C28x系列的28069、28377D的PWM使用经验
  6. PXE无人值守系统安装配置简要说明
  7. sql脚本导入sql_学习SQL:SQL脚本
  8. 第七届 蓝桥杯 省赛 第六题 方格填数(next_permutation)
  9. 运维工程师面试题 ----- 系统网络类
  10. app 服务器 运营 维护,app服务器维护
  11. cf519D . A and B and Interesting Substrings 数据结构map
  12. 文件比较,忽略目录引起编译出错
  13. C++实现一个基于mfc的学生信息管理系统
  14. 支付宝芝麻信用免押金领取POS机、信用免押租赁系统开发
  15. 减小app大小的方法——iOS开发用ImageOptim压缩png图片
  16. Android PackageManager详解
  17. simulink——产生阶梯波
  18. 基于[三星6818]芯片超声波测距驱动编写
  19. Invalid bound statement (not found)出现的原因和解决方法
  20. crx什么意思_CRX文件怎么打开-CRX是什么格式-CRX文件是什么意思-腾牛网

热门文章

  1. 7种深度学习工具介绍
  2. 软件、系统与平台的区别
  3. linux系统鼠标变沙漏,一纸沙漏
  4. 上海亚商投顾:沪指失守3000点 半导体、白酒领跌两市
  5. Android 内存优化实践与总结
  6. Elsevier期刊投稿疑问
  7. T14 Gen1 安装 Ubuntu 16 笔记
  8. 团队RONG合三状态,您的团队是哪一种?
  9. DIY百元级激光雕刻机
  10. 机器学习项目(五) 电影推荐系统(七)WideDeep