RxJava를 사용한 서버 폴링-서버 응답을받은 후 반복

현재 RxJava를 사용하여 서버 폴링을 구현하려고합니다. 서버 응답을받은 후 전체 체인을 반복하는 방법에 대한 연구를 수행했습니다. repeat ()로 시도했지만 작동하지만 완벽하게 작동하지 않습니다. 그 이유는 API 호출을 너무 많이하고 서버는 클라이언트로 보내기 전에 데이터를 처리하는 데 추가 시간이 필요하지만 정확한 시간을 알지 못하므로 특정 시간을주기 위해 repeatWhen ()을 사용할 수 없습니다. 내가 사용할 수있는 유일한 것은 API 응답 후 기다리는 것입니다.

조언을 주시면 감사하겠습니다!

다음은 코드 조각입니다.

retrofitService.requestPolling()
              .repeat()   // do not wait to call server so many times
              .takeUntil(new Func1<PollResponse, Boolean>() {
                      @Override
                      public Boolean call(PollResponse pollResponse) {
                            return pollResponse.mComplete;
                       }
               })
             .doOnNext(new Action1<FlightSearchPollResponse>() {
                @Override
                public void call(pollResponse pollResponse) {
                      // update UI here
                }
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<PollResponse>() {
                @Override
                public void onCompleted() {

                    }
                }

                @Override
                public void onError(Throwable e) {

                }

                @Override
                public void onNext(PollResponse pollResponse) {

            } );

편집 : 나는 RxJava를 처음 접했고 BackPressure라는 주제를 얻었 으며이 응답을 캐시하고 싶지 않기 때문에 처리 방법을 설명하는 많은 기사가 있습니다. Subject가 좋은 옵션이 될 것입니다. 당길 때.

http://akarnokd.blogspot.com/2015/06/subjects-part-1.html

@Gary LO 덕분에

게리 LO

많은 접근법이 있어야합니다. 그중 하나를 공유하고 싶습니다.

  1. 별도의 신호 스트림 생성 PublishSubject pollingSignal
  2. 신호를 API 호출로 변환
  3. 다시 할 신호를 게시하십시오.

    final PublishSubject<Boolean> pollingSignal = PublishSubject.create();
    
    final Observable<PollResponse> apiResponse = retrofitService.requestPolling();
    
    pollingSignal
      .flatMap(x -> apiResponse)
      .subscribe(new Observer<PollResponse>() {
        @Override
        public void onCompleted() {}
    
        @Override
        public void onError(Throwable throwable) {}
    
        @Override
        public void onNext(PollResponse integer) {
          // start the next polling 
          pollingSignal.onNext(true);
      }
    });
    
    // start the first polling 
    pollingSignal.onNext(true);
    

즐기세요!

사용 PublishSubject<Boolean>대신은 PublishSubject<Void>내가 사용하는 것이 편안하지 않기 때문에 pollingSignal.onNext(null).

하지만 Kotlin에서는 다음 PublishSubject<Unit>과 함께 사용할 수 있습니다 .pollingSignal.onNext(Unit)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Jquery Ajax 서버 폴링; 이전 Ajax 응답을 기반으로 서버 폴링

분류에서Dev

scp 명령을 사용하여 한 원격 서버에서 다른 원격 서버로 파일과 폴더를 복사하는 방법은 무엇입니까?

분류에서Dev

Windows PowerShell 스크립팅을 사용하여 한 서버에서 다른 서버로 폴더 내용 복사

분류에서Dev

nodejs에서 배열을 반복 한 후 한 번만 응답을 반환하는 방법은 무엇입니까?

분류에서Dev

버튼을 클릭 한 후 패널을 반복해서 다시 칠합니다.

분류에서Dev

Swift에서 DispatchQueue를 사용하여 Alamofire 요청을 반복 한 후 알림을받는 방법은 무엇입니까?

분류에서Dev

Ubuntu 서버 VM을 복제 한 후 변경해야 할 사항

분류에서Dev

Ubuntu 서버 VM을 복제 한 후 변경해야 할 사항

분류에서Dev

Tomcat 또는 GlassFish 서버를 사용하여 Java Jersey 앱에서 JSON 응답을받을 수 없습니다.

분류에서Dev

스냅 샷에서 서버를 복원 한 후 ORA-12514

분류에서Dev

AngularJS에서 반복을 사용한 API JSON 응답

분류에서Dev

서버에서 응답을받은 후 진행률 표시 줄을 중지하는 방법

분류에서Dev

$ http.get에서 응답을받은 후 메서드 실행

분류에서Dev

Next.js를 사용하여 서버 측 렌더링으로 쿼리 반응

분류에서Dev

jquery .post () 함수에서 응답을받은 후 Google 차트를로드하는 방법은 무엇입니까?

분류에서Dev

원본 캔버스에서 복사 한 후 캔버스가 잘못 렌더링 됨

분류에서Dev

jsonPath를 사용하여 karate dsl에서 복잡한 응답을 필터링하는 방법은 무엇입니까?

분류에서Dev

Jquery를 사용하여 마우스 오버를 반복 한 후 마우스 오버 이미지 변경

분류에서Dev

Java에서 외부 웹 서비스를 호출 한 후 SOAP 응답을받을 수 없습니다.

분류에서Dev

Hapi를 사용한 서버 측 응답 캐싱

분류에서Dev

로그 아웃 후 Vagrant를 사용한 Persistent Rails Webrick 서버

분류에서Dev

Struts2를 사용하여 서버에서받은 중복 헤더

분류에서Dev

브라우저에 대한 간단한 프록시 서버를 사용하여 http 응답을받을 수 없습니다.

분류에서Dev

OpenVPN을 통해 NordVPN 서버를 사용하여 VPN 서버에 연결 한 후 SSH를 터미널에 허용하는 방법은 무엇입니까?

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

분류에서Dev

Honeybadger를 업데이트 한 후 서버가 응답하지 않음

분류에서Dev

적절한 응답을받을 때까지 서버를 재귀적이고 효율적으로 호출하는 방법은 무엇입니까?

분류에서Dev

서버 목록을 반복하고 각 서버에 대한 경고를 만드시겠습니까?

Related 관련 기사

  1. 1

    Jquery Ajax 서버 폴링; 이전 Ajax 응답을 기반으로 서버 폴링

  2. 2

    scp 명령을 사용하여 한 원격 서버에서 다른 원격 서버로 파일과 폴더를 복사하는 방법은 무엇입니까?

  3. 3

    Windows PowerShell 스크립팅을 사용하여 한 서버에서 다른 서버로 폴더 내용 복사

  4. 4

    nodejs에서 배열을 반복 한 후 한 번만 응답을 반환하는 방법은 무엇입니까?

  5. 5

    버튼을 클릭 한 후 패널을 반복해서 다시 칠합니다.

  6. 6

    Swift에서 DispatchQueue를 사용하여 Alamofire 요청을 반복 한 후 알림을받는 방법은 무엇입니까?

  7. 7

    Ubuntu 서버 VM을 복제 한 후 변경해야 할 사항

  8. 8

    Ubuntu 서버 VM을 복제 한 후 변경해야 할 사항

  9. 9

    Tomcat 또는 GlassFish 서버를 사용하여 Java Jersey 앱에서 JSON 응답을받을 수 없습니다.

  10. 10

    스냅 샷에서 서버를 복원 한 후 ORA-12514

  11. 11

    AngularJS에서 반복을 사용한 API JSON 응답

  12. 12

    서버에서 응답을받은 후 진행률 표시 줄을 중지하는 방법

  13. 13

    $ http.get에서 응답을받은 후 메서드 실행

  14. 14

    Next.js를 사용하여 서버 측 렌더링으로 쿼리 반응

  15. 15

    jquery .post () 함수에서 응답을받은 후 Google 차트를로드하는 방법은 무엇입니까?

  16. 16

    원본 캔버스에서 복사 한 후 캔버스가 잘못 렌더링 됨

  17. 17

    jsonPath를 사용하여 karate dsl에서 복잡한 응답을 필터링하는 방법은 무엇입니까?

  18. 18

    Jquery를 사용하여 마우스 오버를 반복 한 후 마우스 오버 이미지 변경

  19. 19

    Java에서 외부 웹 서비스를 호출 한 후 SOAP 응답을받을 수 없습니다.

  20. 20

    Hapi를 사용한 서버 측 응답 캐싱

  21. 21

    로그 아웃 후 Vagrant를 사용한 Persistent Rails Webrick 서버

  22. 22

    Struts2를 사용하여 서버에서받은 중복 헤더

  23. 23

    브라우저에 대한 간단한 프록시 서버를 사용하여 http 응답을받을 수 없습니다.

  24. 24

    OpenVPN을 통해 NordVPN 서버를 사용하여 VPN 서버에 연결 한 후 SSH를 터미널에 허용하는 방법은 무엇입니까?

  25. 25

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

  26. 26

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

  27. 27

    Honeybadger를 업데이트 한 후 서버가 응답하지 않음

  28. 28

    적절한 응답을받을 때까지 서버를 재귀적이고 효율적으로 호출하는 방법은 무엇입니까?

  29. 29

    서버 목록을 반복하고 각 서버에 대한 경고를 만드시겠습니까?

뜨겁다태그

보관