我正在创建Android
应用程序,该应用程序正在使用gRPC
与服务器通信。我的服务方法很少。使用简单的rpc方法进行通信没有问题,但是bidirectional streaming
有问题。
我收到一条消息ServerToClient,此后出现错误:
io.grpc.StatusRuntimeException: CANCELLED: Cancelled
这是我的服务:
service CommunicationGateway {
[...]
rpc CommunicationChannel(stream ClientToServer) returns (stream ServerToClient) {}
}
这是我使用ManagedChannel
和存根创建OkHttp
的方式:
this.channel = OkHttpChannelBuilder.forAddress(ip, port)
.useTransportSecurity()
.connectionSpec(ConnectionSpec.MODERN_TLS)
.sslSocketFactory(buildSslContext().socketFactory)
.keepAliveWithoutCalls(true)
.build()
this.asyncStub = CommunicationGatewayGrpc.newStub(this.channel)
这是我要开始流式传输的代码:
val clientToServerRequest = asyncStub.communicationChannel(object : StreamObserver<Messages.ServerToClient> {
override fun onNext(value: Messages.ServerToClient) {
info("communicationChannel onNext $value")
}
override fun onError(t: Throwable) {
t.printStackTrace()
}
override fun onCompleted() {
info("communicationChannel onCompleted")
}
})
我的应用程序(客户端)还是服务器端出现此问题?或者我该如何检查?
答案 0 :(得分:0)
您描述的状态描述可能不完整。可能应该是(是的,包含换行符):
Cancelled
Rst Stream
假设它是由现代版本的gRPC-Java和基于OkHttp的传输在客户端生成的。
如果是这种情况,则服务器/代理会取消RPC。客户端上没有更多信息。
如果您正在使用服务器端代理,则可能是在超时后终止了流。检查您代理的配置。
答案 1 :(得分:0)
事实证明,这是服务器端的问题