Я создаю приложение 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")
}
})
Это проблема с моим приложением (на стороне клиента) или на стороне сервера? Или как это проверить?
@ user675693 Я могу отправить сообщение на сервер, и я получаю на него ответ, но через миллисекунды я получаю StatusRuntimeException: CANCELED: Cancelled
Описание статуса, которое вы описали, вероятно, неполное. Вероятно, это должно было быть (да, с новой строкой):
Cancelled
Rst Stream
Предполагается, что он был сгенерирован на стороне клиента современной версией gRPC-Java с транспортом на основе OkHttp.
Если это так, то сервер / прокси отменил RPC. На стороне клиента больше нет информации.
Если вы используете прокси на стороне сервера, он может убить поток по истечении тайм-аута. Проверьте конфигурацию вашего прокси.
Как оказалось, проблема была на стороне сервера.
В чем была проблема ?
@Tausifmohammad не знаю, бэкэнд-разработчики исправили это
Вы отправляли какое-нибудь сообщение с clientToServerRequest? Тайм-аут сервера истек?