问题描述
页面上有开始和结束两个操作;点击开始后开始计时并显示计时时长;
终端1点击开始后,计时开始;
终端2进入页面,从服务器获取到已经开始的时间,从获取到的时间开始计时;
终端1点击结束,计时截止,终端1显示最终持续时间;
终端2如何知道已经结束并停止计时,且显示的最终持续时间和终端1相同?
问题出现的环境背景及自己尝试过哪些方法
现在想到有两种方案
方案1:前端定时器
写一个定时器,每隔10S去服务端取一次数据,获取当前是开始还是结束的状态,如果是结束,则结束计时,显示计时的时间;
存在问题:
理论上可能存在最多10S的误差。如终端1点击开始后,终端2在10:00获取到状态为开始并开始计时;若在终端2下次调用接口之前,如10:01时终端1点击结束,终端1显示的最终持续时间为10:01;而终端2在10:10S时通过接口获知状态已经结束,终端2停止计时,显示的最终持续时间为10:10,和终端1不一致;
方案2:websocket实时消息推送
理论上来说,如果终端1点了停止,终端2实时获取到状态,再停止其计时,但存在网络问题,中间也可能有1~2S误差。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
你期待的结果是什么?实际看到的错误信息又是什么?
两个终端有没有什么办法让一个终端点击停止后,另一个终端能够立即获知,并结束自己的计时,最终两个终端显示的持续时间保持一致?
请求长连接,计时结束手动断开连接,后台记录时间。