Как клиент gRPC может узнать о потере / сбое сети?

#java #stream #grpc #server-side

#java #поток #grpc #на стороне сервера

Вопрос:

В java-проекте есть потоковая передача на стороне сервера с использованием grpc. Когда сеть была разорвана между сервером и клиентом, клиент даже не знает о проблеме, streamobserver простаивает и не работает. Как я могу узнать об этом отключении?

Комментарии:

1. Одним из способов было бы, чтобы обе стороны отправляли информацию о «сердцебиении» каждые X секунд или около того. Когда они перестают поступать, вы знаете, что что-то не так, как должно быть. Конечно, это говорит вам только о том, что больше не поступает сердцебиений, а не о том, почему это так.

Ответ №1:

Вы не знаете, что соединение разорвано, пока не отправите сообщение. Так работает протокол TCP.

Итак, если вы находитесь в процессе потоковой передачи на стороне сервера и внезапно отключили свой модем, клиентская сторона никогда не узнает, пока ОС не закроет сокет (может занять несколько минут).).

Вы могли бы либо изменить, чтобы реализовать bidi-streaming, чтобы клиент периодически отправлял запросы, чтобы он знал о сбоях сети при попытке записи в сокет, либо вы можете включить keepAlive.