专栏名称: Cang_Wang
Android研发架构师
目录
相关文章推荐
郭霖  ·  抱歉,今年劝各位别轻易跳槽...... ·  12 小时前  
复利大王  ·  深圳婚恋江湖的厮杀 ·  13 小时前  
复利大王  ·  分手撕大逼!老马已不适合美国了 ·  13 小时前  
复利大王  ·  六年级已成早恋重灾区了? ·  昨天  
复利大王  ·  大瓜!124名医生涉嫌受贿被曝光 ·  2 天前  
51好读  ›  专栏  ›  Cang_Wang

[Android]Okhttp心跳策略研究

Cang_Wang  · 掘金  · android  · 2019-03-13 06:53

正文

请到「今天看啥」查看全文


这一张非常经典的心跳策略图示

心跳pingpong机制

现在一般的心跳策略,都是从客户端发送一个ping信号给服务器,告诉服务器是长连接存活。 服务器会返回一个pong信号给客户端,让其更新心跳线程时间。如果超时没有接收到信号,那么客户端考虑重连机制。

这里说一下okhttp有提供了WebSocket的封装,我们的应用也是使用了WebSocket,那就直接看一下WebSocket对pingpong的封装

 public Builder() {
      ……
      //这里默认的ping的时间间隔为0,因为okhttp也可以有如http短连接
      pingInterval = 0;
    }

    Builder(OkHttpClient okHttpClient) {
       ……
      //builder函数提供封装
      this.pingInterval = okHttpClient.pingInterval;
    }
    //设置间隔
public Builder pingInterval(long interval, TimeUnit unit) {
      pingInterval = checkDuration("interval", interval, unit);
      return this;
    }
复制代码

在RealWebSocket中启动循环发送ping信号

public void initReaderAndWriter(String name, Streams streams) throws IOException {
    synchronized (this) {
      this.streams = streams;
      this.writer = new WebSocketWriter(streams.client, streams.sink, random);
      this.executor = new ScheduledThreadPoolExecutor(1, Util.threadFactory(name, false));
      if (pingIntervalMillis != 0) {
        //循环定时任务
        executor.scheduleAtFixedRate(
            new PingRunnable(), pingIntervalMillis, pingIntervalMillis, MILLISECONDS);
      }
      if






请到「今天看啥」查看全文


推荐文章
复利大王  ·  深圳婚恋江湖的厮杀
13 小时前
复利大王  ·  分手撕大逼!老马已不适合美国了
13 小时前
复利大王  ·  六年级已成早恋重灾区了?
昨天
复利大王  ·  大瓜!124名医生涉嫌受贿被曝光
2 天前
美域健康  ·  关于贲门癌你应该知道的几件事
8 年前
不贱不散  ·  照片
8 年前