RxJava retryWhen操作符实现错误重试机制

来源:互联网 发布:linux 磁盘挂载出问题 编辑:程序博客网 时间:2024/04/28 23:56

业务需求

当我们在app里发起网络请求时,可能会因为各种问题导致失败。如何利用RxJava来实现出现错误后重试若干次,并且可以设定重试的时间间隔。

具体实现

网络请求使用Retrofit来做,请求用户信息接口

<code class="hljs css has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-at_rule" style="box-sizing: border-box;">@<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">GET("/userinfo?noToken=1")</span>    Observable<Response> <span class="hljs-function" style="box-sizing: border-box; color: rgb(0, 102, 102);">getUserInfoNoToken()</span></span>;</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

请求用户信息接口的逻辑代码

<code class="hljs java has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">userApi.getUserInfoNoToken()                        <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//总共重试3次,重试间隔3000毫秒</span>                        .retryWhen(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> RetryWithDelay(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span>))                        .observeOn(AndroidSchedulers.mainThread())                        .subscribeOn(Schedulers.io())                        .subscribe(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Action1<Response>() {                            <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>                            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">call</span>(Response response) {                                String content = <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> String(((TypedByteArray) response.getBody()).getBytes());                                printLog(tvLogs, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, content);                            }                        }, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Action1<Throwable>() {                            <span class="hljs-annotation" style="color: rgb(155, 133, 157); box-sizing: border-box;">@Override</span>                            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span> <span class="hljs-title" style="box-sizing: border-box;">call</span>(Throwable throwable) {                                throwable.printStackTrace();                            }                        });</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

RetryWithDelay代码:

<code class="hljs handlebars has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="xml" style="box-sizing: border-box;"><span class="php" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">public</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">RetryWithDelay</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">implements</span>            <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Func1</span><<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Throwable</span>>, <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><?></span></span>> {        private final int maxRetries;        private final int retryDelayMillis;        private int retryCount;        public RetryWithDelay(int maxRetries, int retryDelayMillis) {            this.maxRetries = maxRetries;            this.retryDelayMillis = retryDelayMillis;        }        @Override        public Observable<span class="php" style="box-sizing: border-box;"><span class="hljs-class" style="box-sizing: border-box;"><?> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">call</span>(<span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Observable</span><? <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Throwable</span>> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">attempts</span>) {</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> attempts                    .flatMap(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> Func1<Throwable, Observable<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><?</span>></span>>() {                        @Override                        public Observable<span class="php" style="box-sizing: border-box;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><?</span>> call(Throwable throwable) {                            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (++retryCount <= maxRetries) {                                <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// When this Observable calls onNext, the original Observable will be retried (i.e. re-subscribed).</span>                                printLog(tvLogs, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">""</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"get error, it will try after "</span> + retryDelayMillis                                        + <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" millisecond, retry count "</span> + retryCount);                                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Observable.timer(retryDelayMillis,                                        TimeUnit.MILLISECONDS);                            }                            <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Max retries hit. Just pass the error along.</span>                            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Observable.error(throwable);                        }                    });        }    }</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul>

如何模拟重试呢?

方法一:把服务器关闭,关闭服务器后,客户端请求接口的必然会报错,看看是不是重试三次。

运行输出:

<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

上面是重试三次了,但是我们怎么知道,如果在服务器启动后,在接下的重试中请求成功呢?接下来试试方法二。

方法二:先把服务器关闭,当点击按钮请求的同时,启动Tomcat服务器。

运行输出:

<code class="hljs applescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">get</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">error</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">it</span> will <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">try</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">after</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3000</span> millisecond, retry <span class="hljs-command" style="box-sizing: border-box;">count</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">false</span>, Thread Name:Retrofit-Idle'username:chiclaim,age:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">007</span>'Main Thread:<span class="hljs-constant" style="box-sizing: border-box;">true</span>, Thread Name:main</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

可以发现,在第三次重试的时候,服务器可用了。

转自:http://blog.csdn.net/johnny901114/article/details/51539708

0 0
原创粉丝点击