我有两个应用程序,它们在网络中与Netty在java中进行通信。
在我的服务器应用程序中,我会定期检查连接是否已在运行,即netty频道是否仍然准备就绪:
public void run() {
LOGGER.trace("controller.run");
this.alive = true;
while (this.alive) {
// Is the channel down ?
if (isConnected()) {
sdvAndSleep();
} else {
stop();
}
}
}
在函数sdvAndSleep()中,我发送了一个heartbreat,我睡了一觉(1秒)。在函数stop()中,我启动一个警报,然后设置alive = false。
在函数isConnected中,我检查netty:
public boolean isConnected() {
return this.connexion != null && this.connexion.hasChannel() && this.connexion.getChannel().isActive();
}
当我的应用程序运行时,我有时会发出警报,因为“this.connexion.getChannel()。isActive()”部分返回false。但实际上,我的连接已经在运行(我在日志中看到了消息),因此连接并不是非常接近。
我的问题是:如何使用netty中的函数isActive()?为什么它返回false而连接工作?