Websocket Session 共享解决

article/2025/9/17 10:06:20

Websocket Session 共享解决(方案一)

既然Websocket Session 不能直接序列化然后存储,而且如果用户请求的时候,开始与集群中的A 节点创建链接,就算把这个  Session  拿到B 节点去再给用户Push 消息,应该也是不通(没测试)的。

所以我的解决方案采用订阅式队列去触发  Websocket  反推的方式来实现看上去是  Session共享  的,思路如下图:

Websocket Session  共享 思路图解释:

模块一:这里没有什么好说明的,因为每一个用户只创建以一个  Session  ,当用户再次链接到第二个节点的时候,第一个节点的  Session  就会关闭和销毁。而每个节点采用静态(static )的成员变量去存储(Map)当前节点的所有Websocket Session 。

模块二:因为每个节点存储的是每个节点的所有Websocket Session ,那么只需要判断下当前节点是否存在当前用户的Websocket Session ,存在则反推消息。

模块三:当有消息需要通过  Websocket  推送给对应的用户的时候,而又不知道这个用户在哪个节点,那么通过任务调度模块,把消息以订阅MQ 的方式放到  MQ  中,这样每个节点都可以收到消息,从而参照 “模块二”判断当前用户是否存在当前节点。然后推送。

 

Websocket Session 共享解决(方案二)

其实我们之所以要做共享,其实就是因为在集群环境中,在HA/Nginx等方案中,做轮询请求来减轻节点压力,这样导致用户可能分配在多个节点,那么如果我们采用IP等的Hash值规则,或者其他可以参考的规则。解决一个用户只会分配到一个节点上,那么就不存在Session共享了。这样的中间件好多。如我们的“伞神”提出的 采用阿里的 Tengine 的session sticky 组件” 就可以解决。其他的也很多。


http://chatgpt.dhexx.cn/article/xoaK7lAL.shtml

相关文章

使用redis实现session共享

继上一遍文章,使用nginx实现负载均衡以后,新的问题又产生了,当使用负载均衡以后,我们如何实现session共享,因为session是保存在服务端的,对于单体应用来说这不是问题,因为只有一个服务器&#x…

Session共享问题-session原理

问题1:微服务情况下。域名不同。session不共享 问题2:分布式系统下。同一个域名下,多个服务。session会出现不同步问题(例如第一次访问的是A服务,保存了。第二次访问了B,查询到的还是没信息) 解决&#xf…

Springboot:Session共享

1、概述 传统单机web应用中,一般使用tomcat/jetty等web容器时,用户的session都是由容器管理。浏览器使用cookie中记录sessionId,容器根据sessionId判断用户是否存在会话session。这里的限制是,session存储在web容器中&#xff0c…

Java -- SpringSession实现session共享

在集群系统中,经常需要将 Session 进行共享。不然会出问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的 Session ,会强制让用户重新登陆。 如在同域名&#xff0c…

shiro分布式session共享

当我们开发的程序需要跑在多个tomcat容器或者多台机器上时,shiro的默认session存储就不能满足我们的需求了,其中shiro默认的session是存储在运行jvm内存中的,使用的AbstractSessionDAO抽象类的一个子类MemorySessionDAO,当我们需要…

tomcat+redis实现session共享

注意:在实际应用中,发现该方案会不定期导致Tomcat假死(怀疑Redis连接未释放),慎用。 服务器192.168.14.132和192.168.14.133, 均已经安装tomcat,tomcat安装过程不再赘述。 采用192.168.14.132…

Session共享问题

Session共享及Session保持或者叫做Session⼀致性 1、Session问题原因分析 出现这个问题的原因,从根本上来说是因为Http协议是无状态的协议。客户端和服务端在某次会话中产生的数据不会被保留下来,所以第⼆次请求服务端无法认识到你曾经来过,…

session共享(redis实现)

引言 大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的; 在我学习项目时遇到这样一个登录情景,假设有如下三台服务器&#xff0…

如何实现session共享的几种解决方案?

先了解一下为什么会出现这种session共享的解决方案? 随着互联网公司的项目在微服务和分布式的环境下进行的搭建,导致一个项目可能分别部署在几个甚至很多的服务器集群下,此时就会出现一个问题当用户进行一个session会话的时候,比…

session共享几种方式

Session共享三种方式 1.nginx基于ip_hash负载均衡。 只需要更改nginx.conf配置文件。添加ip_hash就可以了。 缺点:1.由于ip_hash分配tomcat的时候用的是除法,所以新添加一台服务器会导致分配不到原来程序上,session会丢失。2.同一个公网ip…

session共享学习

一、Session共享 1 什么是Session共享    是指在一个浏览器对应多个Web服务时,服务端的Session数据需要共享。 2 Session共享应用场景 单点登录Web服务器集群等 3 Session共享常见的解决方案 3.1 Session复制       通过对应用服务器的配置开启服务器的Sess…

redis实现session共享

session共享 什么是session? 由于 HTTP 协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户。Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Sessi…

UART协议概述与实现

UART协议概述(一) 协议描述关键代码逻辑写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议。非常简单的协议,协议细节不需要多说,只说需要注意的点。空闲位为高位,起始位为…

UART协议简述及编程

UART原理简述 通用异步收发器简称UART(universal asynchronous receiver transmitter)。他的用途很广泛,一般常用的就是用来输出打印的信息,也可以外接各种模块,例如GPS和蓝牙等。 正是因为这种协议非常的简单可靠&…

UART协议及串口回环

UART协议及串口回环 一、异步通信的分类1、UART(通用异步收发器)2、RS4223、RS4854、Modbus5、接口标准 二、UART协议要求1、空闲状态2、起始位3、数据位4、校验位5、停止位6、波特率7、比特率 三、汉字发送四、串口回环uart_txuart_rxctrltop 五、参考六…

基于verilog的uart协议实现

目录 1、理论介绍 2、架构设计 3、代码设计 一、发送模块代码 二、接收代码设计 三、顶层模块设计 四、测试代码 4、仿真实验 1、理论介绍 uart:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种串行的收发方式…

UART协议快速扫盲(图文并茂+超详细)

文章目录 1 UART发展历史1.1 早期的串行通讯设备1.2 早期的芯片级UART1.3 现代UART的发展 2 预备知识3 协议层起始位数据校验位停止位波特率 4 传输过程5 物理层6 优缺点 1 UART发展历史 1.1 早期的串行通讯设备 早期的电报机器使用长度可变的脉冲信号进行数据传输&#xff0…

UART协议学习

通信协议分层 物理层 物理层规定通讯系统具有的机械、电子功能部分的特性,确保原始数据在物理媒体的传输。如RS232、RS485等就是电气协议,规定了数据传输时的电平标准,网络上许多博主将UART看作一个协议族,这些电气协议都是UART…

c语言模拟uart协议的收发

这篇文章注重思想的讲解,理解下来肯定对uart协议有一个更深的认识。 uart协议,通常用在嵌入式设备之间的通信。像下面这样: 问题一:uart是全双工还是半双工? 你完全可以将两个设备想象成两个人,上图中的两条线想象成A和B的对话。A对B说话和B对A说话的一个场景。问大家一个问题…

UART协议详解

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。 定义:UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主…