将通道参考用于定时器

时间:2012-01-19 22:41:59

标签: java timer netty

我在尝试使用Channel实例(从'channelConnected'方法获取)到Timer(org.jboss.netty.util.Timer)时遇到了一些麻烦。因为使用外部变量到'TimerTask'是必要的,它被声明为'final'。

我尝试做的是当客户端连接时,启动一个Timer,当连接处于活动状态时,通过该通道发送一些信息,因为我需要使用常规时间间隔。有没有办法做到这一点?

感谢您的帮助。

public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        ...
        this.timerLocal.newTimeout(new TimerTask() {
            public void run(Timeout timeout) throws Exception {
                Channel ch = ctx.getChannel();
                ch.write("data data data");
            }
        }, 25, TimeUnit.SECONDS);
        ...
}

1 个答案:

答案 0 :(得分:1)

我真的不明白你的问题究竟是什么,但我认为你正在寻找的东西也可以通过IdleStateHandler和IdleStateAwareUpstreamHandler完成。

只需插入一个IdleStateHandler,它会每隔x秒触发写入空闲事件的空闲事件,然后创建一个自定义的IdleStateAwareUpstreamHandler,它将侦听这些事件并触发Channel.write(...)