Closed QiXi closed 3 years ago
Ну да, получается вообще есть несколько вариантов когда может разрываться соединение https://tinkoffcreditsystems.github.io/invest-openapi/faq_errors/
Думаю стоит добавить и возможность подписаться на окончание, и возможность автоматического реконнекта.
Ну и если разберетесь почему конкретно так происходит, отпишите, пожалуйста.
Сделал форк и добавил pingInterval: Duration(seconds: 120)
в IOWebSocketChannel.connect
, соединение работает до сих пор, а прошло уже 2 часа. Безусловно на стороне сервера должны быть проверки на бездействие клиента и нужно посылать пинги с клиента для удержания коннекта. Рекомендую добавить эту строку.
И что важно, бездействие детектится внутри отдельного подключения! так как до этого теорию проверял ошибочно, сделав запрос на другой метод в api, хотя апи, в теории, может быть разнесен на кластер серверов и работать независимо. Поэтому каждое продолжительное подключение должно иметь свои пинги.
Ну да, это логично. Спасибо 👍 Добавлю
После нескольких дней теста подтверждаю, что теперь программа может работать по 5+ часов без остановки потока. Но всё равно это не 24/7 и 1-2 раза в день поток останавливается во время торгов. Будет полезным знать о onDone из TIStreaming.
Да, добавлю
https://github.com/greymag/tinkoff-invest-openapi-dart-sdk/blob/6d15a40663ba0f17a9f316c274b6a40398f41c17/lib/src/streaming/ti_streaming.dart#L123
Для моего решения нужна непрерывная работа потока данных, но сейчас подписки на поток завершаются выводом
[streaming] Done
в первые 10-50 минут работы приложения (чаще 50 минут, но бывает как меньше так и больше промежуток до завершения). Я предпологаю что на это влияет серверная часть брокера, мне бы пригодилась возможность иметь доступ к методуDone
, чтобы в нужный момент попробовать переподписаться на поток. Придется делать форк и проверять теорию, но может знаете почему так происходит и какие есть еще способы предотвратить остановку потока. Второе предложение задействовать pingInterval, но тоже нужно проверить.