Recent Posts
Recent Comments
반응형
«   2026/10   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

오늘도 공부

Rx에서의 멀티캐스팅 방법 본문

Android/RXAndroid

Rx에서의 멀티캐스팅 방법

행복한 수지아빠 2017. 2. 9. 17:25
반응형

출처 : http://blog.danlew.net/2016/06/13/multicasting-in-rxjava/


멀티 캐스팅은 RxJava에서 중복 된 작업을 줄이기위한 핵심 방법입니다.

당신이 이벤트를 멀티 캐스트하면 보내 같은 이벤트를 모두 다운 스트림 사업자 / 가입자. 이 기능은 네트워크 요청과 같이 값 비싼 작업을 수행 할 때 유용합니다. 각 가입자마다 똑같은 네트워크 요청을 반복적으로 실행하고 싶지는 않습니다. 결과를 멀티 캐스팅하기 만하면됩니다.

멀티 캐스트에는 두 가지 방법이 있습니다.

  1. 를 사용 ConnectableObservable을 통해 ( publish()또는replay()1 )
  2. 사용 Subject

ConnectableObservable또는 전에 수행 된 Subject작업은 한 번만 발생합니다. 그런 다음 해당 작업은 모든 다운 스트림에 멀티 캐스트 Subscribers됩니다.

: 당신이 인식해야 여기에 미묘한 지점이 스트림 만의 시점에서 멀티 캐스트 ConnectableObservable또는Subject . 그 결과, 멀티 캐스트 후에 수행하는 작업에 따라 복제된다 Subscriber.

이것이 어떻게 작동하는지 예를 들어 보겠습니다.

Observable<String> observable = Observable.just("Event")  
    .publish()
    .autoConnect(2)
    .map(s -> {
      System.out.println("Expensive operation for " + s);
      return s;
    });

observable.subscribe(s -> System.out.println("Sub1 got: " + s));  
observable.subscribe(s -> System.out.println("Sub2 got: " + s));

// Output:
// Expensive operation for Event
// Sub1 got: Event
// Expensive operation for Event
// Sub2 got: Event

여기서 우리는이 ConnectableObservable, 고가의 map()운영 및 두 Subscribers. 놀라운 결과는 고가 인 것이 map()작업 실행 회 우리가 것을 방지하려하더라도 publish()!

이 차트는 상황을 더 명확하게 만듭니다.

게시가 작동하지 않는 이유를 보여주는 차트

당신이 실제로 원하는 경우 map()한 번 일이, 당신은 그것을 넣을 필요가 전에publish()전화 :

Observable<String> observable = Observable.just("Event")  
    .map(s -> {
      System.out.println("Expensive operation for " + s);
      return s;
    })
    .publish()
    .autoConnect(2);

observable.subscribe(s -> System.out.println("Sub1 got: " + s));  
observable.subscribe(s -> System.out.println("Sub2 got: " + s));

// Output:
// Expensive operation for Event
// Sub1 received: Event
// Sub2 received: Event

업데이트 된 차트는 다음과 같습니다.

올바른 게시 사용법이있는 차트

여기에 무슨 교훈이 있니? 작업량을 줄이기 위해 멀티 캐스팅에 의존한다면 올바른 시점에서 멀티 캐스팅해야합니다.

좋든 나쁘 든 들어, 많은 사람들이 사용하고 있습니다 Subjects. 하나의 장점은 멀티 캐스트하지만 당신은 그들이 것을 기억해야한다는 것입니다 만 그들이 방출 지점에서 멀티 캐스트. 당신이 비싼 사업자의 무리가 하류의 적용이 있다면 Subject당신은 다른 추가하는 것을 고려한다 publish()하류 어딘가에.


1 share() 및cache()도 옵션입니다,하지만 그들은 기본적으로 그냥 주위에 바로 가기ConnectableObservable. share()그냥publish().refCount()및cache()사용하여 재 작성 할 수 있습니다replay().autoConnect().

반응형

'Android > RXAndroid' 카테고리의 다른 글

Easy SQLite on Android with RxJava  (0) 2017.02.21
Rx 예제모음  (0) 2017.02.21
MissingBackpressureException 설명  (0) 2017.02.03
Flowable 를 언제 사용하면 될까?  (0) 2017.02.03
RxJava 예제  (0) 2017.01.31