【问题标题】:When my process dies can I voluntarily close my Diffusion session?当我的进程终止时,我可以自愿关闭我的 Diffusion 会话吗?
【发布时间】:2016-04-26 10:10:07
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: push-diffusion


    【解决方案1】:

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

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

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

    Session session = Diffusion.sessions()
      .noReconnection()
      .open("wss://myserver");
    

    【讨论】:

      【解决方案2】:

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

      会话有一个close method,可用于关闭会话。

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多