Если у работающего робота отключить интернет, он об этом не узнает, т.к. клиент не пытается пинговать сервер.
Решение
Добавлена периодическая отправка ping-пакета на сервер с ожиданием pong-ответа. Для конфигурации таймингов, добавлен новый конструктор Streaming Client. При отсутствии pong-а в указанный таймаут, клиентский код получает error и может реализовать собственную логику переподключения к сокету и переподписки на интересующие события.
Сохранена обратная совместимость. Использование ping-pong включается фича-флагом в новом конструкторе. По умолчанию, это поведение отключено.
Отчёт о тестировании
Подключил версию из текущего PR к своему роботу, написал в нём переподключение. Прикладываю логи того, что происходит при отключении и восстановлении интернета:
% go run main.go
> Running the application daemon...
> Running the streaming API goroutine...
> Runned!
> Successfully connected! Running a read loop...
...
> Error while streaming read received: can't read message: read tcp ***.***.***.***:*****->178.248.239.55:443: i/o timeout. Reconnect...
> Trying to connect to Tinkoff...
> Failed to estabilish a streaming connection with Tinkoff. Retry #0 (delay: 10000 ms).
> Trying to connect to Tinkoff...
> Successfully connected! Running a read loop...
Проблема
Если у работающего робота отключить интернет, он об этом не узнает, т.к. клиент не пытается пинговать сервер.
Решение
Добавлена периодическая отправка ping-пакета на сервер с ожиданием pong-ответа. Для конфигурации таймингов, добавлен новый конструктор Streaming Client. При отсутствии pong-а в указанный таймаут, клиентский код получает error и может реализовать собственную логику переподключения к сокету и переподписки на интересующие события.
Сохранена обратная совместимость. Использование ping-pong включается фича-флагом в новом конструкторе. По умолчанию, это поведение отключено.
Отчёт о тестировании
Подключил версию из текущего PR к своему роботу, написал в нём переподключение. Прикладываю логи того, что происходит при отключении и восстановлении интернета: