在Netty 4.x中实现引导池

时间:2012-10-06 18:10:24

标签: java netty

我正在尝试使用netty 4.x实现异步redis客户端。在阅读了netty源代码和doc之后,使用与ServerBootstrap中的childEventLoop相同的NioEventLoop [s]似乎更有效。问题是我似乎需要将RedisClientPool附加到每个NioChildEventLoop,否则我无法共享这些缓存的连接,但EventLoop不是AttributeMap。 我尝试扩展NioEventLoop并覆盖newChild以返回自定义NioChildEventLoop(只是复制代码,因为它被声明为final),并带有AttributeMap字段,以便我可以共享一些对象通过它。

public class NioChildEventLoopWithAttributeMap extends SingleThreadEventLoop {

    private AttributeMap map = new DefaultAttributeMap();

    public <T> Attribute<T> attr(AttributeKey<T> key) {
        return map.attr(key);
    }

    //.... omit the copied codes
}

public class CustomNioEventLoop extends NioEventLoop {
    public EventExecutor newChild() {
        return new NioChildEventLoopWithAttributeMap();
    }
}

但在AbstractChannel中,它会检查EventLoop

protected boolean isCompatible(EventLoop loop) {
    return loop instanceof NioChildEventLoop;
}

我不知道现在该做什么,有什么建议吗?抱歉我的英语很糟糕。

1 个答案:

答案 0 :(得分:1)

只是为了记录,在github上有netty4和netty3的redis-codec:

https://github.com/spullara/redis-protocol