【问题标题】:Netty 4.0 IdleStateHandler not working correctlyNetty 4.0 IdleStateHandler 无法正常工作
【发布时间】:2013-07-10 19:33:15
【问题描述】:

编辑:一切正常。问题完全在另一边。这可以用作一个工作示例。

我正在尝试在我的服务器中使用 Netty 4.0.9 实现 IdleStateHandler。 我遇到的问题是它不会触发 IdleStateEvent。

为了测试,我只是让客户端“崩溃”,就像我对 OIO 所做的那样(并且在这种情况下一切都按预期工作)。

我确定我在任何地方都没有阻塞,一切正常(包括来自客户端的正常关闭连接请求)。

这是我的代码... 管道

public PipelineInitializer(){
    super();
}

@Override
protected void initChannel(SocketChannel ch) throws Exception {
    // Idle Handlers
    ch.pipeline().addLast("IdleChecker", new IdleStateHandler(15,0,0));
    ch.pipeline().addLast("IdleDisconnecter", new IdleDisconnecter());

    // Decoding Handlers
    ch.pipeline().addLast("Framer", new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter()));
    ch.pipeline().addLast("Decoder", STR_DECODER);

    // Encoding Handlers
    ch.pipeline().addLast("Encoder", STR_ENCODER);

    // Processing Handlers (if Idle Event, disconnects)
    ch.pipeline().addLast("ServiceSelector", new ServiceSelector());
}

以及应该处理 IdleEvent 的 Handler:

public class IdleDisconnecter extends ChannelDuplexHandler {

public IdleDisconnecter(){
    super();
}

@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception{
    System.out.println("Event Fired"); // Doesn't trigger
    if (evt instanceof IdleStateEvent) {
        System.out.println("Event is IdleStateEvent"); // Doesn't trigger
        if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) {
            System.out.println("Event is a Reader one"); // Doesn't trigger
            throw new Exception(); //I want this to be catch by the last handler in the pipeline
        }
    }
}

有什么建议吗?可能我犯了一些我拒绝看到的愚蠢错误,我不知道,但我完全没有想法。

谢谢

【问题讨论】:

  • 这应该可以...你能提交一个测试用例来显示netty bug tracker上的问题吗?
  • 感谢您的回答,确实可以正常工作,问题出在客户端。我将把这个问题作为一个工作示例。

标签: java netty


【解决方案1】:

您可以尝试添加
ctx.fireChannelRead(msg);
在您的其他处理程序中。 更多信息可以看Netty Handler not called

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2013-06-24
    相关资源
    最近更新 更多