使用Grpc双向流,当我尝试运行grpc时,低于错误
Connection Error
io.netty.handler.codec.http2.Http2Exception: HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: at io.netty.handler.codec.http2.Http2Exception.connectionError(Http2Exception.java:82)
at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.readClientPrefaceString(Http2ConnectionHandler.java:322)
at io.netty.handler.codec.http2.Http2ConnectionHandler$PrefaceDecoder.decode(Http2ConnectionHandler.java:263)
at io.netty.handler.codec.http2.Http2ConnectionHandler.decode(Http2ConnectionHandler.java:445)
at io.netty.handler.codec.ByteToMessageDecoder.decodeLast(ByteToMessageDecoder.java:382)
at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:286)
at io.netty.handler.codec.http2.Http2ConnectionHandler.channelInactive(Http2ConnectionHandler.java:421)
at io.grpc.netty.NettyServerHandler.channelInactive(NettyServerHandler.java:227)
at io.netty.channel.ChannelHandlerInvokerUtil.invokeChannelInactiveNow(ChannelHandlerInvokerUtil.java:56)
at io.netty.channel.DefaultChannelHandlerInvoker.invokeChannelInactive(DefaultChannelHandlerInvoker.java:92)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:135)
at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:928)
at io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:674)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:339)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:356)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:742)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
Joh*_*art 13
有一点需要注意,默认行为NettyServerBuilder和ManagedChannelBuilderw/r/t明文之间存在差异.
如果未在服务器上启用TLS(例如,通过调用sslContext()或useTransportSecurity()在服务器构建器上启用),则必须ManagedChannelBuilder.usePlaintext(true)在连接到服务器的任何通道上调用.
因此,换句话说,服务器可以正常默认为纯文本,但对于需要调用的通道usePlaintext(),允许与纯文本服务器进行通信.如果没有,你会得到这个确切的HTTP/2 client preface string missing or corrupt异常(虽然,在我的情况下,在hexdump之后有一个特定的字节串).
客户端和服务器不同意。通常这是因为一个是明文,另一个使用 TLS。但也可能是由于某些环境中的 HTTP/1 与 HTTP/2 造成的。
但它Hex dump for received bytes是空的,因此没有足够的信息来更准确地诊断问题。不过,当我看到此失败时,我从未见过字节为空。
| 归档时间: |
|
| 查看次数: |
4460 次 |
| 最近记录: |