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