Netty 4.0的IdleStateHandler未能正常工作。

4

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

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

为了测试,我只是像使用OIO时一样让客户端“崩溃”(在那种情况下,一切都按预期工作)。

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

以下是我的代码,Pipeline

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的处理程序:

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跟踪器上展示问题的测试用例吗? - Norman Maurer
2
感谢您的回答,确实可以正常工作,问题在客户端。我将保留这个问题作为一个工作示例。 - Nevril
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接