greymag / tinkoff-invest-openapi-dart-sdk

Tinkoff Invest OpenAPI SDK for Dart.
BSD 3-Clause "New" or "Revised" License
10 stars 3 forks source link

[streaming] Done #4

Closed QiXi closed 3 years ago

QiXi commented 3 years ago

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, но тоже нужно проверить.

greymag commented 3 years ago

Ну да, получается вообще есть несколько вариантов когда может разрываться соединение https://tinkoffcreditsystems.github.io/invest-openapi/faq_errors/

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

Ну и если разберетесь почему конкретно так происходит, отпишите, пожалуйста.

QiXi commented 3 years ago

Сделал форк и добавил pingInterval: Duration(seconds: 120) в IOWebSocketChannel.connect, соединение работает до сих пор, а прошло уже 2 часа. Безусловно на стороне сервера должны быть проверки на бездействие клиента и нужно посылать пинги с клиента для удержания коннекта. Рекомендую добавить эту строку.

QiXi commented 3 years ago

И что важно, бездействие детектится внутри отдельного подключения! так как до этого теорию проверял ошибочно, сделав запрос на другой метод в api, хотя апи, в теории, может быть разнесен на кластер серверов и работать независимо. Поэтому каждое продолжительное подключение должно иметь свои пинги.

greymag commented 3 years ago

Ну да, это логично. Спасибо 👍 Добавлю

QiXi commented 3 years ago

После нескольких дней теста подтверждаю, что теперь программа может работать по 5+ часов без остановки потока. Но всё равно это не 24/7 и 1-2 раза в день поток останавливается во время торгов. Будет полезным знать о onDone из TIStreaming.

greymag commented 3 years ago

Да, добавлю

greymag commented 3 years ago

Добавил в версии 0.1.3

QiXi commented 3 years ago

Добавил в версии 0.1.3

Благодарю.