完成如下功能开发:
1. 点击按钮,生成QRCode
2. 成功POST请求服务器接口
3. 查看服务器返回内容(QRCodeResponse)
4. 查看服务器日志,检查Nginx反向代理webSocket 60秒内始终保持长连接
开发过程:
1. 利用okhttp3和retrofit向服务器发起POST请求, SUCCESS之后,服务器会返回二维码生成地址和二维码过期时间 listener.onRefresh(rsp.web_url, rsp.expire_time, handler);
2. 通过服务器返回的web_url地址,作为content,生成二维码图片qrCodeDisplay(final String content, final String expired_time); 通过Timer.schedule newTask定时检测二维码过期时间和刷新界面; 于此同时,服务器建立websocket连接保持双向通信,创建线程监视二维码过期 (此步骤可以优化,目前是用timer,还用了thread,超时就关闭websocket,应该可以在一处统一监测管理)
3. 两种方法解决Nginx反向代理websocket自动断开问题。一个是,保持okhttp长连接活跃状态keep-alive;一个是,一分钟内主动发送心跳包保持websocket不断。目前采用前者,因为这个方式很简单,在Init() 方法,加入OkHttpClient mOkHttpClient = new OkHttpClient.Builder().pingInterval(57, TimeUnit.SECONDS).build(); 每间隔57秒建立一次OkHttp连接
4. 通过日志,检查结果
Demo app 展示:
日志检查:
API service POST 成功:
WebSocket build成功,并保持心跳连接与通讯:
核心代码:
1. 接口请求代码:
2. 生成二维码图片
3. websocket 连接