2016-08-02 51 views
1

我尝试在RxJava中使用Retrofit2,但我是一个使用RxJava的新手&改造。用RxJava改造2,同时多次调用同一服务器api

我有一个像API:

@POST("donSomething") 
Observable<RespData> doSomeThing(@Body ReqData reqData); 

而且它可以在同一时间被多次调用。

如果我多次同时拨打doSomeThing,将会创建多少个http请求?

如果我只是想创建一个Http请求(使用RxJava),该怎么办?

+0

我也对此感兴趣。我敢打赌,你需要用代码的多个部分来分享这个observable,除非你明确要求刷新,否则你不希望它被多次调用。不是吗? –

回答

0

每次您将会执行一次http调用订阅到您的Observable

例如:

   // nothing will happens, you haven't subscribe to your observable 
      yourservice.doSomething(request); 

如果您订阅您Observable然后改造将执行HTTP调用:

   // one http call will be performed as soon as the subscribe method is call on your Observable 
      yourservice.doSomething(request).subscribe(); 

一个HTTP的通话将被每次执行您订阅:

   // do nothing (in term of http call) 
      Observable<RespData> obs = yourservice.doSomething(request); 

      // first call 
      obs.subscribe(); 

      // second call 
      obs.subscribe(); 

如果你想执行一个http调用而不是几个,你可能想要执行网络呼叫折叠。如果是这样,你可以看看Hystrix执行此操作:https://github.com/Netflix/Hystrix/wiki/How-it-Works#RequestCollapsing

+0

Hystrix很有趣,RequestCollapsing也是......但这意味着你可以使用Hystrix。通常情况并非如此。我认为它应该是RxJava的解决方案(我希望有)。 –

+0

你可以看看hystrix如何做到这一点,因为它使用RxJava。 (可以用它来做请求折叠) – dwursteisen