Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Netty 4.x中实现引导池_Java_Netty - Fatal编程技术网

Java 在Netty 4.x中实现引导池

Java 在Netty 4.x中实现引导池,java,netty,Java,Netty,我正在尝试使用Netty4.x实现一个异步redis客户端。在阅读netty源代码和文档之后,使用与我在ServerBootstrap中用作childEventLoop的相同的NioEventLoop似乎更有效。问题是我似乎需要将这样一个RedisClientPool附加到每个NioChildEventLoop,否则我无法共享那些缓存的连接,但EventLoop不是AttributeMap。 我试图扩展NioEventLoop并覆盖newChild,以返回一个带有AttributeMap字段的自

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

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
}
但是在
AbstractChannel
中,它检查EventLoop

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

我不知道现在该怎么办,有什么建议吗?对不起,我的英语很糟糕。

请注意,github上有一个针对netty4和netty3的redis编解码器:


是的,我也可以使用自定义的
NioServerSocketChannel
NioSocketChannel
,但解决这样一个简单的问题似乎太复杂了。为什么需要编写redis客户端?在压力下,使用保持活动连接和阻塞连接池与非阻塞客户端具有相同的性能
protected boolean isCompatible(EventLoop loop) {
    return loop instanceof NioChildEventLoop;
}