Netty ClosedChannelException

时间:2013-08-04 12:27:16

标签: java io netty

我是netty的新手,我跟着这个example使用netty写了一个静态文件服务器。但只要服务器提供大型js文件。它会遇到ClosedChannelException。

以下是我的代码,我将chunkedFile写为http响应。 当一个大的js文件被提供时,我得到closedChannelException并且raf文件也被关闭。

你能帮我弄清楚我在这里做错了什么吗?另外,是否有一个简单的教程,让我了解netty中的基本控制流程?

     // Write the content.
      ChannelFuture writeFuture = null;
    try
    {
        long fileLength = raf.length();
        HttpResponse response = new DefaultHttpResponse(
            HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
        response.setHeader(HttpHeaders.Names.CONTENT_LENGTH, fileLength);
        Channel c = ctx.getChannel();
        // Write the initial line and the header.
        c.write(response);

        writeFuture = c.write(new ChunkedFile(raf, 0, fileLength, 8192));
    }
    finally
    {
        raf.close();
        if (writeFuture != null)
            writeFuture.addListener(ChannelFutureListener.CLOSE);
    }
}

<

1 个答案:

答案 0 :(得分:2)

在finally块中调用raf.close()是错误的,因为它可能还没有写入。实际上,netty会在写完成后关闭它。