【问题标题】:Netty 4 thows "unexpected message type: io.netty.handler.codec.http.DefaultHttpContent" after chunked file loadNetty 4 在分块文件加载后出现“意外的消息类型:io.netty.handler.codec.http.DefaultHttpContent”
【发布时间】:2016-04-19 00:12:16
【问题描述】:

在我最初使用 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

【问题讨论】:

  • 您能否展示一些代码,例如,您的管道是如何构建的以及您是如何发送文件的

标签: java http server netty


【解决方案1】:

问题是@ChannelHandler.Sharable 导致在同一个事件循环上发送的标头没有正文。我重写了我的 WebSocket/HTTP 选择器,以便在每次初始化时实例化一个通道处理程序。

分块文件不能在可共享的处理程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2013-08-16
    • 2022-12-16
    • 1970-01-01
    • 2019-06-15
    • 2017-12-10
    • 1970-01-01
    相关资源
    最近更新 更多