默认
发表评论 11
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
求教移动端如何保证本地时间戳不受设备影响?
阅读(46109) | 评论(11 收藏1 淘帖
最近发现手动修改设备的系统时间,并且切断网络,微信和QQ发送的消息时间还是正确的,有人知道这是怎么实现的吗? 是在本地维护了一个时钟吗

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:求助 IM开发
上一篇:求教即时通讯IM系统异地多活方案,具体该怎么实现?下一篇:求教IM云端消息应该加密存储还是明文存储呢?
推荐方案
评论 11
对于im来说,可以通过长连接的定时心跳机制,来矫正本地时间,这是完全有条件可以做到的
引用:JackJiang 发表于 2021-10-13 14:42
对于im来说,可以通过长连接的定时心跳机制,来矫正本地时间,这是完全有条件可以做到的

我完全切断了网络,杀死App重新打开的,如果是服务端校验的不应该啊
引用:深海 发表于 2021-10-13 14:56
我完全切断了网络,杀死App重新打开的,如果是服务端校验的不应该啊

在你杀死之前肯定拉过来了一个服务端的起始时间,后面的时间可以根据这个时间累加偏移量嘛
我认为客户端发消息是不带时间戳的,是消息到达服务端后,服务端生成的,对于发送方,可以消息送达的回执里给客户端,对于接收方,直接把这个时间戳附加到消息协议里就行了
引用:zhxh007 发表于 2021-10-14 19:05
我认为客户端发消息是不带时间戳的,是消息到达服务端后,服务端生成的,对于发送方,可以消息送达的回执里 ...

如果是按照时间戳排序的话,会出现这样一个问题,发出的消息在还没有拿到服务端的回执的时候使用本地时间戳,如果本地时间戳不对,该条消息可能会跑到最上面,收到服务端的回执更新了时间戳,消息又回来了
引用:深海 发表于 2021-10-15 09:32
如果是按照时间戳排序的话,会出现这样一个问题,发出的消息在还没有拿到服务端的回执的时候使用本地时间戳 ...

那对于发送方,本地消息按发送方的时间来,接收方的时间按服务器的时间来,如果出现乱序问题,直接告诉是因为客户端本地时间不对,让用户自己解决,毕竟客户端时间不对的用户在少数
引用:zhxh007 发表于 2021-10-15 16:00
那对于发送方,本地消息按发送方的时间来,接收方的时间按服务器的时间来,如果出现乱序问题,直接告诉是 ...

是的,本地时间不对是极少数情况,很多产品都不去考虑这个问题,只能说微信处理的很细节
引用:zhxh007 发表于 2021-10-15 16:00
那对于发送方,本地消息按发送方的时间来,接收方的时间按服务器的时间来,如果出现乱序问题,直接告诉是 ...

懒人思路,也是个方法
关于这一块的实现思路,我们基本与Jack Jiang大佬所讲的方法大致相同,即“通过长连接的定时心跳机制,来矫正本地时间”,
以及“根据服务端的起始时间累加偏移量”。

具体的做法如下:
1.利用心跳包可以携带少量业务信息的特点,将服务器时间随PONG包一起下发
2.客户端每次收到PONG包后,记录「本地时间」与「服务器时间」
3.当发送消息需要获取当前时间值时,首先计算「当前本地时间」与「前面所记录的本地时间」的差值
4.随后用该差值加上「前面所记录的服务器时间」,即可推算出「当前服务器时间」
引用:椎锋陷陈 发表于 2021-10-18 09:44
关于这一块的实现思路,我们基本与Jack Jiang大佬所讲的方法大致相同,即“通过长连接的定时心跳机制,来矫 ...

嗯呢,严谨
引用:椎锋陷陈 发表于 2021-10-18 09:44
关于这一块的实现思路,我们基本与Jack Jiang大佬所讲的方法大致相同,即“通过长连接的定时心跳机制,来矫 ...

这个方法也是不能100%避免,比如心跳时间过长,这期间用户改了时间,差值就不对了
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部