当前位置: 首页 > 知识库问答 >
问题:

Netty服务器如何知道客户端何时断开连接?

堵睿范
2023-03-14

我正在制作满足以下条件的Netty服务器:

    null
    final ChannelFuture cf = inboundChannel.writeAndFlush(resCodec);

    cf.addListener(new ChannelFutureListener() {

        @Override
        public void operationComplete(ChannelFuture future) {

            if (future.isSuccess()) {
                inboundChannel.close();

            } else {
                try {
                // do Rollback Process B Here
            }
        }
    });
    if(inboundChannel.isActive()){
      inboundChannel.writeAndFlush(msg);
    } else{
      // do RollBack B
    }

    // Similar codes using inboundChannel.isOpen(), inboundChannel.isWritable()

在我的情况下,既没有发生“通道不活动”事件,也没有发生“连接被对等方重置”异常。





这是我使用的Netty测试客户端代码的部分。

    public void channelActive(ChannelHandlerContext ctx) {
        ctx.writeAndFlush(message).addListener(ChannelFutureListener.CLOSE);        
    }


如何在要回复时注意到断开连接?

共有1个答案

叶光华
2023-03-14

可能您应该重写下面的方法,看看当通道关闭时控件是否在这里。

@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
    // write cleanup code
}

我认为在netty中跟踪客户端是否连接是不可能,因为netty和客户端之间存在一个抽象。

 类似资料:
  • 我用的是Netty 3.9 我有一个客户场景,我必须按照这个顺序进行操作 连接 发送1条消息 接收1消息 断开连接 由于连接和断开连接是一项成本高昂的操作,我希望尽可能多地重用Netty级别的对象。 所以我做以下事情 上面的代码生成了java.nio.channels。ClosedChannel异常,可能是因为套接字已关闭。但是Netty中没有api,我可以使用它断开与服务器的连接,并且仍然保留套

  • 我将创建一个身份验证服务器,它本身与一组不同的Oauth2.0服务器交互。Netty似乎是在这里实现网络部分的一个很好的候选者。但在开始之前,我需要澄清一些关于netty的细节,因为我是新手。例行程序如下: > < li> 服务器接受来自客户端的HTTPS连接。 然后,不关闭第一个连接,它通过HTTPS与远程OAuth2.0服务器建立另一个连接并获取数据 毕竟,服务器将结果发送回客户端,客户端应该

  • 我正在开发一个与许多客户端连接的服务器。我需要知道客户端何时与服务器断开连接。因此,每个客户端都向服务器发送一个特定的字符。如果两秒钟后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。 这是我的服务器的主要代码: 第一个问题是,我用来识别在线客户端的方式(每秒发送特定消息)是否是一种好方法? 如果它是好的,我如何使用检测与女巫客户端相关,然后如何断开密钥与服务器的连接

  • 根据IBM文档:清除策略指定在检测到陈旧连接或致命连接错误时如何清除连接。有效值为EntirePool和FailingConnectionOnly。 问题:服务器如何/何时知道连接已过时?它是否会尽快(立即)清洗池任何连接都会过时,或者按照收获时间发生? 假设收割时间为180秒。假设收割线程上次在下午3:05运行,连接在下午3:06失效,服务器是在下午3:06自己清除池,还是只在下午3:08清除池

  • 问题内容: 我正在尝试使用python开发客户端/服务器解决方案,服务器必须使用Avahi广播服务可用性。我正在使用以下代码来发布服务: 对于客户端,我正在尝试通过以下方式搜索服务: 但是,客户端没有检测到服务何时启动。有什么想法我做错了吗? 问题答案: 我发现该代码按预期工作。我有防火墙规则阻止avahi相关的发布。

  • 问题内容: 目前,我正在研究基于Java RMI构建的聊天服务器- 客户端程序。为了使客户端能够检测到其连接的服务器已失效,我只能想到两种可能的解决方案,但是在我的情况下,它们都无法很好地工作。 1.等到客户端需要调用服务器的某些方法后,这种方法无法正常工作,因为如果聊天客户端不调用服务器的任何方法,它将不会知道服务器已死,因此聊天客户端无法接收那时再没有任何新的聊天消息。 2.通过每隔几秒钟调用