Documentation
¶
Overview ¶
Package resume 提供断线重连的在场状态还原:客户端用 refresh token 重连, 服务端换出 userID,查 presence 看用户还在哪些流,返回流列表让客户端自动重连。
session resume:断线后 presence 不立即 清除(给一个宽限期),重连时把该会话仍持有的流回给客户端,客户端按列表重新 join, 实现"掉线不掉状态"的体验。
它把 pkg/token(验证 refresh)与 pkg/presence(查在场流)织成完整登录态:
token.VerifyRefresh → userID/tokenID → presence.ListBySession → []Stream
零值不可用,用 New 构造。并发安全(只读组合两个并发安全组件)。
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrExpired = token.ErrExpired
ErrExpired refresh token 已过期。
var ErrInvalidToken = token.ErrInvalidToken
ErrInvalidToken refresh token 无效。
var ErrKicked = token.ErrKicked
ErrKicked 用户已被全局踢出。
var ErrNotConfigured = errNotConfigured{}
ErrNotConfigured token 管理器或 tracker 未配置。
var ErrRevoked = token.ErrRevoked
ErrRevoked refresh token 已被注销。
Functions ¶
This section is empty.
Types ¶
type Option ¶
type Option func(*config)
Option 配置 Resolver。
func WithTokenManager ¶
WithTokenManager 设置 token 管理器(必填,用于验证 refresh token)。
type PresenceInfo ¶
PresenceInfo 一个会话的在场快照:在哪些流 + 对应 userID。
type Resolver ¶
type Resolver struct {
// contains filtered or unexported fields
}
Resolver 把 refresh token 解析为在场快照。
func (*Resolver) MarkOnline ¶
MarkOnline 在重连后把新会话重新登记到 presence(便于后续 ListBySession 命中)。 调用方应在重连握手成功后、对每个返回的 Stream 调 Track,或直接用本方法批量重登。 userID/username 从 token claims 取(sessionID 走不到 token 时留空)。
func (*Resolver) Resolve ¶
func (r *Resolver) Resolve(refreshToken string) (PresenceInfo, error)
Resolve 用 refresh token 还原在场快照。 流程:VerifyRefresh 换 claims → 用 sessionID(=tokenID)查 presence.ListBySession → 投影成 Stream 列表。
sessionID 的约定:业务在 Issue 时把 tokenID 作为 presence.Track 的 sessionID (或建立 sessionID↔tokenID 映射),本包按此约定查询。 若业务用别的 sessionID 方案,可用 ResolveBySessionID 直接传 sessionID。
func (*Resolver) ResolveBySessionID ¶
func (r *Resolver) ResolveBySessionID(sessionID string) (PresenceInfo, error)
ResolveBySessionID 直接按 sessionID 还原在场快照(不走 token 验证)。 适用于业务自管 sessionID、只需查在场流的场景。