心跳时ServiceStack会话生存期会增加

时间:2016-03-02 04:14:23

标签: c# .net servicestack httpserver

我有一个ServerEventsFeature的服务。我使用的是ServerEventsClient,默认情况下会向服务发送心跳。据我所知,ServiceStack不支持从框中滑动到期,但会在每次心跳后刷新会话生命周期。它应该如何,有没有办法控制它?我通过将SessionExpiry设置为30秒并将HeartbeatInterval设置为20秒来测试它 - 应用程序会发送多个(10+)心跳,如果出现任何问题。此外,如果客户端应用程序崩溃并强制关闭 - 会话将是" alive"在服务器会话列表中,直到我尝试使用它,有没有办法提前删除它?

示例:

  1. 启动服务器

  2. 启动客户端1

  3. 执行

    var sessionPattern = IdUtils.CreateUrn<IAuthSession>("");
    var sessionKeys = Cache.GetKeysStartingWith(sessionPattern).ToList();
    var allSessions = Cache.GetAll<IAuthSession>(sessionKeys);
    

    结果计数为1

    1. 启动客户端2和3

    2. 通过强制关闭(无注销呼叫)删除客户端1

    3. 再次执行相同的代码 - 结果计数为3

1 个答案:

答案 0 :(得分:1)

服务器事件订阅对用户会话没有任何影响。

用户会话是在用户成功进行身份验证后创建的,并在明确注销会话到期时间时销毁。

服务器事件订阅只是对用户与SSE /event-stream的长期HTTP连接的引用,它与用户会话的唯一关系是订阅可能是经过身份验证的用户的订阅。

但是,用户会话的生命周期(仅仅是已注册的ICacheClient中保留的AuthUserSession POCO)不受服务器事件订阅的影响,因为它从不重新保存用户会话,因此永远不会更改会话到期。