Android gRPC Status RuntimeException:已取消:在双向流媒体服务中已取消

Android gRPC Status RuntimeException:已取消:在双向流媒体服务中已取消,android,grpc,Android,Grpc,我正在创建Android应用程序,它使用gRPC与服务器通信。我几乎没有什么服务方法。使用简单的rpc方法进行通信没有问题,但我在双向流传输方面有问题 我收到一条消息ServerToClient,之后我收到错误: io.grpc.status运行时异常:取消:取消 这是我的服务: service CommunicationGateway { [...] rpc CommunicationChannel(stream ClientToServer) returns (stream

我正在创建
Android
应用程序,它使用
gRPC
与服务器通信。我几乎没有什么服务方法。使用简单的rpc方法进行通信没有问题,但我在双向流传输方面有问题

我收到一条消息ServerToClient,之后我收到错误:
io.grpc.status运行时异常:取消:取消

这是我的服务:

service CommunicationGateway {
    [...]
    rpc CommunicationChannel(stream ClientToServer) returns (stream ServerToClient) {}
}
下面是我如何使用
OkHttp
和存根创建
ManagedChannel

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")
    }
})
val clientToServerRequest=asyncStub.communicationChannel(对象:StreamObserver{
覆盖下一个(值:Messages.ServerToClient){
信息(“通讯频道onNext$value”)
}
覆盖有趣的错误(t:可丢弃){
t、 printStackTrace()
}
覆盖未完成的乐趣(){
信息(“通信频道未完成”)
}
})

这是我的应用程序(客户端)还是服务器端的问题?或者如何检查?

您描述的状态描述可能不完整。它可能应该是(是的,包含换行符):

假设它是由现代版本的GRPCJava在客户端生成的,并带有基于OkHttp的传输

如果是这种情况,则服务器/代理取消了RPC。客户端上没有更多信息


如果您使用的是服务器端代理,那么它可能会在超时后终止流。检查您的代理的配置。

事实证明,这是服务器端的一个问题

您是否使用clientToServerRequest发送了任何消息?服务器超时了吗?@user675693我可以向服务器发送消息并得到响应,但几毫秒后我得到状态RuntimeException:CANCELLED:CANCELLED有什么问题?@Tausifmohammad不知道,后端开发人员修复了它
Cancelled
Rst Stream