JAVA后端服务端与移动端客户端高精度时间同步思路

一、脑补

在Chrome--->Network----> Timing中可以查看一个请求在各个阶段所花费的时间。

Timing中各个字段的意思发:

**1、Queueing:**从增加到等待处理队列到实际开始处理的时间间隔------浏览器也有线程机制,所有的请求不能同时发送,也需要队列排队处理请求。

**2、Stalled:**浏览器从请求队列获取到要发出的请求到请求可以发出的等待时间(通常为代理协商以及等待可复用的TCP连接释放)

**3、DNS Lookup:**DNS执行查找的一个完整的往返时间(将域名解析为IP)。当本地DNS缓存没有的时候需要消耗这段时间,否则基本都为0;

4、Initial connection:建立TCP连接的时间(即DNS查询+Proxy时间+TCP握手时间等)

5、Request sent:请求第一个字节发出前到最后一个字节发出后的时间(即上传时间);

6、Waiting(Time To First Byte,TTFB):请求发出到收到响应的第一个字节所花费的时间;

7、Content Download:收到响应的第一个字节到接受完最后一个字节的时间(即下载时间);

二、客户端/服务端时间同步倒计时

javascript 复制代码
let now = new Date().getTime(); 

// 伪代码 -- 获取响应时间,相当于success里的new date().getTime();
let end = getResponseTime();

// 伪代码 -- 获取服务器响应时提供的服务器时间,success后从body里面获取的数据,由后端塞进去的;
var serverTime = getServerTime();  

// 获取TTFBTime,具体怎么获取去网上搜,这里不说了,说下去太多,本文只提供思路;
var TTFBtime = getTTFBTime();

// 得到当前服务器时间,该时间一般偏快于服务器时间0~10ms左右,具体原因从第一节"脑补"中就可以得知;
var currServerTime = serverTime + (end - now) - TTFBTime;
 

* 还可以考虑NTP时间同步,可以继续探索

三、扩展与思考---接口优化/请求时长优化

根据上面脑补后,咱们知道"发送请求完毕"到"开始接收请求"的时间就代表服务器处理业务的时间和和返回数据的网络延时时间。

那么,咱们做接口优化方面就可以根据这个点来作为依据,从而做到更精准的优化效果。

相关推荐
有来技术2 小时前
youlai-boot 实战:MinIO 停止维护,Docker 迁移 RustFS 完整记录
java·后端·docker
吴声子夜歌2 小时前
Java面试——设计模式(二)
java·设计模式·面试
JAVA面经实录9172 小时前
MySQL问题定位与性能优化完整知识体系
java·jvm·数据库·mysql·性能优化
Rain的Java大神之路2 小时前
Docker搭建Redis集群完全指南
java·运维·redis·后端·docker·容器·架构
空堂与归2 小时前
单机 Python 跑不动?Ray 分布式计算框架让 AI 训练提速 10 倍
开发语言·人工智能·python
Raas1002 小时前
大模型网关和API网关区别是什么?MAI Gateway统一AI流量治理
java·大数据·运维·人工智能·gateway·企业级·ai网关
苏子寒2 小时前
Nano-VLLM全代码解析笔记(8)-qwen3与qwen3_moe
笔记·python·深度学习·ai·性能优化·vllm
JacksonMx2 小时前
Java 线程池:复用、Spring 管理、监控与线上故障排查全指南
开发语言·python
BioRunYiXue2 小时前
RACE技术全攻略:从全长克隆到靶基因验证
java·javascript·网络·人工智能·科技·算法·eclipse
脉动数据行情2 小时前
Python WebSocket 实现融通金实时行情监听
开发语言·python·websocket