Store(存储)
该 存储 接口为 socketio4j 定义了每会话的键值存储抽象。 它允许传输、命名空间和用户代码持久化会话范围的小片元元数据,例如用户 ID、身份验证令牌、连接状态或房间成员提示——独立于实际的后端存储实现。
关键特性
会话范围存储 — 每个已连接的客户端会话存在一个存储实例
键值语义 — 任意对象与字符串键关联
与后端无关 — 实现可使用内存、Hazelcast、Redis 或其他数据存储
生命周期感知 — 在底层客户端断开连接时被销毁
类型安全的检索 — 返回值可以被转换或使用泛型类型
工作原理
设置在会话生命周期内将一个值与一个键关联获取返回存储的值,或空如果不存在存在在不加载值的情况下检查键是否存在删除移除单个键值条目销毁移除所有条目,使存储实例失效
使用场景
认证
存储 "userId", "tenant", "tokenClaims"
重连提示
存储 "rooms" 或自定义元数据
自定义握手参数
持久化来自升级/握手的用户元数据
命名空间逻辑
附加仅在当前会话期间需要的状态
优点
👍 在集群和独立模式下工作一致 👍 将会话元数据隔离到每个连接 👍 允许在不更改用户代码的情况下切换存储后端 👍 支持单节点部署的轻量内存操作
限制
ℹ️ 不适用于大型对象或二进制存储 ℹ️ 本身不是分布式数据模型 — 分布性取决于实现 ℹ️ 除了会话生命周期外没有内置的 TTL 或过期机制 ℹ️ 除非由共享存储作为后端,否则不会在会话之间共享
后端行为
内存中
短暂,断开或 JVM 重启时清除
仅本地
最快,最适合单节点
Hazelcast / Redis(redis, valkey, dragonflydb)
分布式(基于后端配置)
跨节点可访问
推荐用于多节点部署
生命周期保证
一个 Store 实例的存在与恰好一个客户端会话一致,并在会话结束时被销毁。 在调用
destroy()之后,不得再次访问该存储。在客户端断开连接时自动调用。
示例
最后更新于
这有帮助吗?