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协议通信