在分块文件加载

时间:2016-01-13 20:34:50

标签: java http server netty

在我最初使用nettys文件块修复my problem并获得“意外消息类型:io.netty.handler.codec.http.DefaultHttpContent”错误后,我发现一个文件是在一个分块之后发送的根据我的调试日志,文件将导致相同的错误(滚动到最右边):

19:50:25.992 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - Send header for file login.html
19:50:25.995 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer complete for login.html.
19:50:46.897 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - Send header for file index.html
19:50:46.900 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer complete for index.html.
19:50:46.926 [nioEventLoopGroup-3-2] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - Send header for file index.min.js
19:50:46.931 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 8192 for index.min.js.
19:50:46.934 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 16384 for index.min.js.
19:50:46.938 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 24576 for index.min.js.
[...]
19:50:47.775 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 729088 for index.min.js.
19:50:47.776 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 729115 for index.min.js.
19:50:47.777 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 729115 for index.min.js.
19:50:47.778 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer progress: 729115 / 729115 for index.min.js.
19:50:47.778 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - [id: 0x6a19f34a, /127.0.0.1:60222 => /127.0.0.1:443] Transfer complete for index.min.js.
19:50:47.778 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - Send file complete --- Starting new file index.min.css
19:50:47.779 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController - Send header for file index.min.css
19:50:47.784 [nioEventLoopGroup-3-3] DEBUG d.k.w.p.n.h.c.h.i.HtDocsController -  Transfer failed for index.min.css.java.lang.IllegalStateException: unexpected message type: io.netty.handler.codec.http.DefaultHttpContent (expected: HttpResponse)

example implementation表示使用ssl时不需要最终的空块。那么我做错了什么?

更新
在我的初始问题之后情况没有改变 我的管道看起来像这样:

SSL
HttpServerCodec
HttpObjectAggregator
ChunkedWriteHandler
FileHandler

我像netty 4 example一样发送苍蝇,区别在于我只接受https。

我发现当记录器显示不同的nioEventLoopGroup时会出现问题。 index.min.js的标题显示了nioEventLoopGroup-3- 2 ,其中正文有一个nioEventLoopGroup-3- 3 这可能是问题所在。

更新
我使用@ChannelHandler.Sharable注释了我的ChannelHandler,这会导致不同的eventLoopGoups。我添加了注释,因为我使用了ChannelHandler,它决定了第一个命令请求是将其作为WebSocket还是作为Http1.1通道。我动态添加和删除处理程序。

当我删除@ChannelHandler.Sharable时,一旦SSL握手出现在日志中,服务器就会退出工作

[nioEventLoopGroup-3-3] DEBUG io.netty.handler.ssl.SslHandler - [id: 0x03c4b130, /127.0.0.1:56868 => /127.0.0.1:443] HANDSHAKEN: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

1 个答案:

答案 0 :(得分:0)

问题是@ChannelHandler.Sharable导致在同一个eventLoop上没有正文的情况下发送标题。我重新编写了我的WebSocket / HTTP选择器,以便每次初始化时实例化一个channelhandler。

Chunked File不能位于可共享的处理程序中。

相关问题