Tinkoff / invest-openapi-go-sdk

Apache License 2.0
153 stars 30 forks source link

Stream logger #32

Closed Artawower closed 3 years ago

Artawower commented 4 years ago

Доброго времени суток, в каких ситуациях может возникнуть проблема десириализации данных при получении сообщения через стрим? Волнует вопрос почему вместо того чтобы вернуть ошибку через канал, или на худой конец через колбек, используется логирование и продолжение выполнения основного потока программы? Например (streaming_client.go)

if err := json.Unmarshal(msg, &event); err != nil {
    c.logger.Printf("Can't unmarshal event %s", msg)
        continue
}

Дело в том что при алготрейдинге не хочется получить простой, хочется обработать ошибку, в данном случае этой возможности нет. Если расширять эту возможность через предоставленный интерфейс логгера это сильно нарушает SR, явно это не задача логгера прерывать выполнение горутины. (Если честно не совсем понятно зачем передавать логгер через DI?, для простого использования приходится пользоваться заглушкой)

necryin commented 4 years ago

добрый день. Потенциально ошибка может быть если сервер пришлет невалидный json. Сейчас считаем что это невозможно, но в случае появления такой ошибки клиент по идее ничего сделать не сможет кроме как залогировать и обратиться в тех поддержку за разъяснениями

Artawower commented 4 years ago

В текущей реализации да, не может (на самом деле можно переопределив метод логера, но это неочень здорово и уместно), а если бы возвращалась ошибка то можно было бы прервать процесс торгов, и уведомить клиента

necryin commented 4 years ago

Впринципе можно сделать другой способ обработки сообщений возвращающий два канала. Канал ошибок и ... канал interface{}. Собственно потому что не хотелось делать канал interface{} сейчас сделано так