2

我正在开发一个将后端系统连接到主题树的控制客户端。后端有几千个端点,主题树有相应数量的主题。

在开发和测试期间,我经常停止和重新启动我的客户端,但之前放置到服务器的会话会再持续 60 秒,这意味着我的会话意志(即我的主题被删除)没有执行,并且我的控制客户端的后续执行不能添加主题或注册为主题更新程序(因为之前的会话尚未过期)。

所以我杀死并重新启动了 Diffusion 服务器,这是不优雅的,很容易被遗忘。

为了健壮性,授予会话的寿命比单个连接长,但在这种情况下,我希望会话关闭。如何做到这一点?

4

2 回答 2

4

60 秒是默认的重新连接超时。服务器会在此期间等待第一个会话重新连接,然后再执行会话。

客户端可以通过配置用于建立连接的会话工厂来减少该时间,或完全禁用重新连接。

Session session = Diffusion.sessions()
  .reconnectionTimeout(1000 /* ms */)
  .open("wss://myserver");

或者

Session session = Diffusion.sessions()
  .noReconnection()
  .open("wss://myserver");
于 2016-04-27T08:18:00.593 回答
3

你没有提到你开发控制客户端的语言,所以我假设是 Java。该过程在其他语言中类似。

session 有一个close 方法,可以用来关闭 session。

由您决定如何/何时关闭会话。一种方法是使用关闭挂钩

Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
    public void run() {
        session.close();
    }
}, "Shutdown-thread"));

这将在程序退出时关闭会话。

于 2016-04-27T07:55:53.710 回答