很长一段时间,当我尝试使用带有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 output
从SpdyServerHandler
更改为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渡渡鸟。
答案 0 :(得分:0)
尝试使用:
sendFileFuture = ctx.write(new HttpChunkedInput(new ChunkedFile(raf, 0, fileLength, 8192)), ctx.newProgressivePromise());