2个心跳包交替执行

1. 概述

这篇文章主要记录下,自己在项目中使用的,给服务器端每隔5秒发送心跳包和每隔5秒给服务器发送数据,交替执行。意思就是:在客户端的okhttp的websocket和服务器端建立长连接后,这个时候需要做的就是:

5秒之后给服务器发送一个心跳包,让服务器知道自己还活着,然后再过5秒后给服务器发送数据;
然后再过5秒后给服务器发送一个心跳包,让服务器知道自己还活着,然后再过5秒后给服务器发送数据;
然后再过5秒后给服务器发送一个心跳包,让服务器知道自己还活着,然后再过5秒后给服务器发送数据;
...
就是这样,二者交替执行;

2. 代码如下

/**
 * Email: 2185134304@qq.com
 * Created by Novate 2018/8/11 8:19
 * Version 1.0
 * Params:
 * Description: 
*/

public class TestActivity extends BaseActivity {

    private CountDownTimer countDownTimer;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }

    @Override
    public void initView() {
        // 刚进入界面,就开启心跳检测
        mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);
    }

    private long sendTime = 0L;
    // 发送心跳包
    private Handler mHandler = new Handler();
    // 每隔2秒发送一次心跳包,检测连接没有断开
    private static final long HEART_BEAT_RATE = 2 * 1000;
    // 发完心跳包后,然后每隔5秒进行给服务器发送一次数据
    private static final long DATA_RATE = 5 * 1000;


    // 发送心跳包
    private Runnable heartBeatRunnable = new Runnable() {
        @Override
        public void run() {
            if (System.currentTimeMillis() - sendTime >= HEART_BEAT_RATE) {
                // 发送心跳包
                sendHeart();
                sendTime = System.currentTimeMillis();
            }
//            mHandler.postDelayed(this, HEART_BEAT_RATE); //每隔一定的时间,对长连接进行一次心跳检测
            // 发送完心跳包后,然后隔5秒再进行发数据
            mHandler.postDelayed(dataRunnable, DATA_RATE);
        }
    };


    private Runnable dataRunnable = new Runnable() {
        @Override
        public void run() {
            if (System.currentTimeMillis() - sendTime >= HEART_BEAT_RATE) {
                if (!TextUtils.isEmpty(closeReason)){
                    // 发送数据
                   sendData();
                   sendTime = System.currentTimeMillis();
            }
            // 发完数据后,然后隔5秒发送心跳包
            mHandler.postDelayed(heartBeatRunnable, HEART_BEAT_RATE);
        }
    };

    // 发送心跳
    private void sendHeart() {
        String jsonHead="";
        Map<String,Object> mapHead=new HashMap<>();
        mapHead.put("heart", "heart") ;
        jsonHead=buildRequestParams(mapHead);
        //连接成功后给服务器发送心跳包
        if (webc != null) {
            webc.send(jsonHead);
        }
    }


    // 发送数据
    private void sendData() {
        String jsonHead="";
        Map<String,Object> mapHead=new HashMap<>();
        mapHead.put("qrCode", "456789") ;
        jsonHead=buildRequestParams(mapHead);
        //连接成功后给服务器发送消息
        if (webc != null) {
            webc.send(jsonHead);
        }
    }

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容