Как сервер или клиент узнают, разорвано ли соединение? - PullRequest
0 голосов
/ 23 января 2020

Я не могу определить внутреннюю работу grpc streaming. У меня есть сценарий, когда у меня есть потоковая передача на стороне сервера, и если я удаляю клиента из сети (вытаскивая сетевой кабель, скажем так), я не получаю никаких ошибок ни на стороне клиента, ни на стороне сервера.

Может кто-то пожалуйста, помогите здесь?

Если я убью сервер, клиент узнает. Если я убью клиента, сервер узнает. Но отключение не идентифицируется.

Мне интересно знать, почему это не работает и как это работает в случае, если сервер или клиент убит. Есть ли какое-нибудь сообщение heartbeat для проверки подключения или как это делается? Я имею в виду, если я отправляю данные каждые 30 секунд c, как это работает?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

inte rnet не будет работать, если промежуточные сетевые пути временно исчезнут. Неактивные сетевые подключения должны быть в состоянии терпеть временные пропадания сетевого пути.

Причина, по которой вы видите, что соединения сервера / клиента прерываются при отключении одной из сторон, заключается в упреждающем разрыве соединения на уровне приложений (сетевой уровень). 7) вниз. Отключение физического кабеля отключает только физический сетевой уровень , и его эффекты не обязательно каскадируются вверх, особенно при незанятом соединении.

Если спецификации вашего приложения настаивают на определенном уровне «живости» «- произносите событие, даже сердцебиение каждые 30 секунд, - вы можете быть уверены, что сервер всегда отправляет даже NOP (сердцебиение) в поток gRP C. В этом случае сервер будет испытывать сбой в сети (в худшем случае) в течение 30 секунд.

Аналогичным образом, если вы обеспокоены тем, что клиент может ожидать подключения, которое больше не доступно, таймер зацикливается go -программа может использоваться на стороне клиента для отмены контекста соединения, если запись (даже сердцебиение) не была получена в течение последних 30 секунд.

1 голос
/ 29 января 2020

gRP C поддерживает keepalive между вашим клиентом и сервером: https://godoc.org/google.golang.org/grpc/keepalive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...