Netty 4.0 SPDY文件传输无法正常工作

时间:2014-06-21 14:59:39

标签: file http netty spdy

很长一段时间,当我尝试使用带有netty的SPDY时,我总是遇到同样的麻烦。

我检查了不同的SPDY来源以设置我的SPDY服务器。到目前为止它工作正常,我的浏览器中有一个纯html输出。 Chrome还会显示一个spdy会话。

问题

当我将netty 4 HttpStaticFileServerHandler示例类放到SPDYorHTTPHandler时,我总是遇到同样的问题。

发送HTML内容,但文件内容不是。处理程序正在发送响应,以便我的客户端检索,但随后文件永远不会传输。

有关于此的任何想法吗?

ctx.write(response)正在将响应写入客户端(响应是HttpResponse obj)。

在下一行:(raf=RandomAccessFile

ChannelFuture sendFileFuture;
    if (useSendFile) {
        sendFileFuture = ctx.write(new DefaultFileRegion(raf.getChannel(), 0, fileLength), ctx.newProgressivePromise());
    } else {
        sendFileFuture = ctx.write(new ChunkedFile(raf, 0, fileLength, 8192), ctx.newProgressivePromise());
    }

但它从未写过。代码基于HttpStaticFileServerHandler示例的100%和netty 4的SPDY示例。

我刚刚将createHttpRequestHandlerForHttp outputSpdyServerHandler更改为HttpStaticFileServerHandler

这是我使用的桩线:

    ChannelPipeline pipeline = ctx.pipeline();
    pipeline.addLast("spdyFrameCodec", new SpdyFrameCodec(version));
    pipeline.addLast("spdySessionHandler", new SpdySessionHandler(version,true));
    pipeline.addLast("spdyHttpEncoder", new SpdyHttpEncoder(version));
    pipeline.addLast("spdyHttpDecoder", new SpdyHttpDecoder(version, MAX_CONTENT_LENGTH));
    pipeline.addLast("spdyStreamIdHandler", new SpdyHttpResponseStreamIdHandler());
    pipeline.addLast("chunkedWriter", new ChunkedWriteHandler());
    pipeline.addLast("httpRequestHandler",new HttpStaticFileServerHandler());

如果您需要更多代码,请写一下,我会扩展帖子。

我没有任何错误,警告或其他内容。

ChannelProgressiveFutureListener从未调用operationProgressed函数。

Thx渡渡鸟。

1 个答案:

答案 0 :(得分:0)

尝试使用:

sendFileFuture = ctx.write(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise());