当我的进程结束时,我可以自愿关闭我的 Diffusion 会话吗?
When my process dies can I voluntarily close my Diffusion session?
我正在开发一个控制客户端,将后端系统连接到主题树。后端有几千个端点,主题树有相应数量的主题。
在开发和测试过程中,我多次停止并重新启动我的客户端,但之前放置在服务器上的会话又持续了 60 秒,这意味着我的会话将(即我的主题被删除)没有执行,随后的执行我的控制客户端无法添加主题,也无法注册为主题更新程序(因为先前的会话尚未过期)。
所以我杀死并重新启动了 Diffusion 服务器,它不优雅且容易被遗忘。
出于稳健性考虑,授予的会话比单个连接的寿命更长,但在这种情况下我希望会话关闭。如何实现?
您没有提到您开发控制客户端所使用的语言,所以我假设 Java。其他语言的过程类似。
会话有一个close method可以用来关闭会话。
由您决定 how/when 是否要关闭会话。一种方法是使用 shutdown hook:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
session.close();
}
}, "Shutdown-thread"));
这将在程序退出时关闭会话。
60 秒是默认的重新连接超时。服务器在此期间等待第一个会话重新连接,然后再执行会话。
客户端可以通过配置用于建立连接的会话工厂来减少该时间,或者完全禁用重新连接。
Session session = Diffusion.sessions()
.reconnectionTimeout(1000 /* ms */)
.open("wss://myserver");
或
Session session = Diffusion.sessions()
.noReconnection()
.open("wss://myserver");
我正在开发一个控制客户端,将后端系统连接到主题树。后端有几千个端点,主题树有相应数量的主题。
在开发和测试过程中,我多次停止并重新启动我的客户端,但之前放置在服务器上的会话又持续了 60 秒,这意味着我的会话将(即我的主题被删除)没有执行,随后的执行我的控制客户端无法添加主题,也无法注册为主题更新程序(因为先前的会话尚未过期)。
所以我杀死并重新启动了 Diffusion 服务器,它不优雅且容易被遗忘。
出于稳健性考虑,授予的会话比单个连接的寿命更长,但在这种情况下我希望会话关闭。如何实现?
您没有提到您开发控制客户端所使用的语言,所以我假设 Java。其他语言的过程类似。
会话有一个close method可以用来关闭会话。
由您决定 how/when 是否要关闭会话。一种方法是使用 shutdown hook:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
session.close();
}
}, "Shutdown-thread"));
这将在程序退出时关闭会话。
60 秒是默认的重新连接超时。服务器在此期间等待第一个会话重新连接,然后再执行会话。
客户端可以通过配置用于建立连接的会话工厂来减少该时间,或者完全禁用重新连接。
Session session = Diffusion.sessions()
.reconnectionTimeout(1000 /* ms */)
.open("wss://myserver");
或
Session session = Diffusion.sessions()
.noReconnection()
.open("wss://myserver");