Комментарии 6
Если есть возможность, пожалуйста, продолжайте!
Вот конкретный пример. Есть некий итеративный метод который возвращает список найденных блютус устройств: List<DiscoveredDevice> getDiscoveredDevices()
. Каждый вызов этого метода может возвратить разные устройства. Необходимо отрефакторить данный метод так чтобы он стал реактивным, а именно, чтоб он возвращал нескончаемый поток, так чтобы клиенты могли бы подписаться на этот поток, и соответственно, получать новые устройства. Первое что приходит в голову это — Flux<DiscoveredDevice> getDiscoveredDevicesStream()
, где внутри этого метода создается поток (thread), и по мере обнаружения новых устройств, вызывался бы emitter.next(...)
. Однако кажется мне что создание потока не совсем верное решение, ибо в reactor'е есть столько различный способов работы с потоками, что может быть это можно как-то решить с помощью reactor'а? Кроме того, может быть лучше работу с потоком возложить на клиента этого метода? Спасибо.
Вариант проще — pull based подход через fluxSink.onRequest. Тут и нить выполнения можно изменить через subscribeOn. Правда, в этом случае сложно организовать «бесконечную» работу.
Более элегантного варианта я не знаю, благо есть гиттер, где в т.ч. отвечают оперативней.
Java и Project Reactor. Эпизод 2