Netty 网状重用通道
我想创建一个可重用通道的连接池,但我想不通 执行此测试Netty 网状重用通道,netty,channels,Netty,Channels,我想创建一个可重用通道的连接池,但我想不通 执行此测试 public void test() { ClientBootstrap client = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); client.setPipelineFactory(new ClientPipelin
public void test() {
ClientBootstrap client = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));
client.setPipelineFactory(new ClientPipelineFactory());
// Connect to server, wait till connection is established, get channel to write to
Channel channel = client.connect(new InetSocketAddress("192.168.252.152", 8080)).awaitUninterruptibly().getChannel();
{
// Writing request to channel and wait till channel is closed from server
HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, "test");
String xml = "xml document here";
ChannelBuffer buffer = ChannelBuffers.copiedBuffer(msgXml, Charset.defaultCharset());
request.addHeader(HttpHeaders.Names.CONTENT_LENGTH, buffer.readableBytes());
request.addHeader(HttpHeaders.Names.CONTENT_TYPE, "application/xml");
request.setContent(buffer);
channel.write(request).awaitUninterruptibly().getChannel().getCloseFuture().awaitUninterruptibly();
channel.write(request).awaitUninterruptibly().getChannel().getCloseFuture().awaitUninterruptibly();
}
client.releaseExternalResources();
}
我在第二个通道中遇到ClosedChannel异常。写入(请求)
是否存在一种重用通道的方法?还是保持渠道畅通
提前感谢第二次写入失败的原因是服务器关闭了连接 服务器关闭连接的原因是您未能添加HTTP头
Connection: Keep-Alive
按照最初的要求
这是保持通道打开所必需的(这是您在本场景中希望执行的操作)
频道关闭后,您必须创建一个新频道。无法重新打开该频道。Channel.getCloseFuture()返回的ChannelFuture是通道的最终值(即常量),一旦此future上的isOne()返回true
,则无法重置。这就是无法重用封闭通道的原因
但是,您可以根据需要多次重复使用开放频道;但是,为了实现这一点,应用程序必须正确地与HTTP协议通信