我有一个ServerEventsFeature
的服务。我使用的是ServerEventsClient
,默认情况下会向服务发送心跳。据我所知,ServiceStack不支持从框中滑动到期,但会在每次心跳后刷新会话生命周期。它应该如何,有没有办法控制它?我通过将SessionExpiry
设置为30秒并将HeartbeatInterval
设置为20秒来测试它 - 应用程序会发送多个(10+)心跳,如果出现任何问题。此外,如果客户端应用程序崩溃并强制关闭 - 会话将是" alive"在服务器会话列表中,直到我尝试使用它,有没有办法提前删除它?
示例:
启动服务器
启动客户端1
执行
var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();
var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);
结果计数为1
启动客户端2和3
通过强制关闭(无注销呼叫)删除客户端1
再次执行相同的代码 - 结果计数为3
答案 0 :(得分:1)
服务器事件订阅对用户会话没有任何影响。
用户会话是在用户成功进行身份验证后创建的,并在明确注销或会话到期时间时销毁。
服务器事件订阅只是对用户与SSE /event-stream
的长期HTTP连接的引用,它与用户会话的唯一关系是订阅可能是经过身份验证的用户的订阅。
但是,用户会话的生命周期(仅仅是已注册的ICacheClient
中保留的AuthUserSession POCO)不受服务器事件订阅的影响,因为它从不重新保存用户会话,因此永远不会更改会话到期。