Java 当netty连接到我的服务器时?
我正在使用此处编写的Channle pool API代码:Java 当netty连接到我的服务器时?,java,netty,Java,Netty,我正在使用此处编写的Channle pool API代码: ChannelPool部分 EventLoopGroup组=新的NioEventLoopGroup(); 最终引导cb=新引导(); InetSocketAddress addr1=新的InetSocketAddress(“10.0.0.10”,8888); InetSocketAddress addr2=新的InetSocketAddress(“10.0.0.11”,8888); cb.group(group.channel)(Nio
ChannelPool
部分
EventLoopGroup组=新的NioEventLoopGroup();
最终引导cb=新引导();
InetSocketAddress addr1=新的InetSocketAddress(“10.0.0.10”,8888);
InetSocketAddress addr2=新的InetSocketAddress(“10.0.0.11”,8888);
cb.group(group.channel)(NioSocketChannel.class);
ChannelPoolMap poolMap=新的AbstractChannelPoolMap(){
@凌驾
受保护的SimpleChannelPool新池(InetSocketAddress密钥){
返回新的SimpleChannelPool(cb.remoteAddress(键),新的TestChannelPoolHandler());
}
};
//根据您使用addr1或addr2的时间,您将获得不同的池。
最终的SimpleChannelPool池=poolMap.get(addr1);
Future f=pool.acquire();
f、 addListener(新的FutureListener(){
@凌驾
公共无效操作完成(未来f){
如果(f.isSuccess()){
通道ch=f.getNow();
//做事
// ...
// ...
//释放回池中
释放池(ch);
}
}
});
正如我看到的代码,我们从未调用过
.connect
方法,所以我的问题是,当netty尝试将我的频道连接到服务器时?当您使用SimpleChannelPool时,它会在调用acquire时进行连接,而频道池中没有任何内容。为什么-1至少有人能解释一下?
EventLoopGroup group = new NioEventLoopGroup();
final Bootstrap cb = new Bootstrap();
InetSocketAddress addr1 = new InetSocketAddress("10.0.0.10", 8888);
InetSocketAddress addr2 = new InetSocketAddress("10.0.0.11", 8888);
cb.group(group).channel(NioSocketChannel.class);
ChannelPoolMap<InetSocketAddress, SimpleChannelPool> poolMap = new AbstractChannelPoolMap<InetSocketAddress, SimpleChannelPool>() {
@Override
protected SimpleChannelPool newPool(InetSocketAddress key) {
return new SimpleChannelPool(cb.remoteAddress(key), new TestChannelPoolHandler());
}
};
// depending on when you use addr1 or addr2 you will get different pools.
final SimpleChannelPool pool = poolMap.get(addr1);
Future<Channel> f = pool.acquire();
f.addListener(new FutureListener<Channel>() {
@Override
public void operationComplete(Future<Channel> f) {
if (f.isSuccess()) {
Channel ch = f.getNow();
// Do somethings
// ...
// ...
// Release back to pool
pool.release(ch);
}
}
});