IM 即时通讯应用 接收消息时序问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rcj6056
V2EX    Android

IM 即时通讯应用 接收消息时序问题

  •  1
     
  •   rcj6056 2023-08-24 11:08:00 +08:00 12520 次点击
    这是一个创建于 779 天前的主题,其中的信息可能已经有所发展或是发生改变。

    IM 即时通讯应用 关于 APP 端消息接收时序的问题 场景: A-> 发消息到服务器->服务器推送到 B A 是早上 8:00 发的消息 B 是下午 18:00 登录的 接收到服务端推送的消息

    那么这个时候

    在 B 的手机上第一条消息会显示一个时间 这个时间用 A 消息的发送时间 还是用 B 消息的本地时间

    24 条回复    2023-08-25 12:15:12 +08:00
    Znemo
        1
    Znemo  
       2023-08-24 11:10:21 +08:00
    作为用户,直觉认为应该是 A 消息的发送时间。
    kamto
        2
    kamto  
       2023-08-24 11:11:33 +08:00
    一般都用 A 投递消息到服务器成功的时间吧
    richangfan
        3
    richangfan  
       2023-08-24 11:13:33 +08:00
    市面上这么多 IM 应用,哪有按接收时间算的
    flyqie
        4
    flyqie  
       2023-08-24 11:14:10 +08:00 via Android
    敢用 B 的时间,绝对会被用户打爆。

    太反直觉了。。用户体验极差。。

    基本都是 A 消息的时间。
    dudubaba
        5
    dudubaba  
       2023-08-24 11:15:52 +08:00   1
    你没搞懂发送时间和接收时间(已读时间)的区别
    rcj6056
        6
    rcj6056  
    OP
       2023-08-24 11:18:43 +08:00
    @dudubaba 麻烦细嗦一波
    opengps
        7
    opengps  
       2023-08-24 11:19:05 +08:00
    统一用服务器时间作为可信时间,求差提醒校准时间
    BBCCBB
        8
    BBCCBB  
       2023-08-24 11:19:44 +08:00
    不应该用时间来排序. 服务器给消息生成一个趋势递增的 id 来排序.
    BBCCBB
        9
    BBCCBB  
       2023-08-24 11:20:22 +08:00
    rcj6056
        10
    rcj6056  
    OP
       2023-08-24 11:20:31 +08:00
    @opengps 那如果 A 偷偷改了手机的时间 他发送的时间是 8 点 server 的时间是 12 点
    B 收到的消息应该是什么时候呢
    opengps
        11
    opengps  
       2023-08-24 11:21:54 +08:00
    @rcj6056 真正操作都是以服务器时间为准。你非要用客户端时间,那就利用得到的差值进行下转换
    imherer
        12
    imherer  
       2023-08-24 11:34:24 +08:00
    肯定是 A 发送消息的服务器时间啊。
    你朋友早上 8 点发了一条消息,你晚上 6 点才收到。 你问你朋友问他是几点发的消息?
    SilentRhythm
        13
    SilentRhythm  
       2023-08-24 11:38:58 +08:00
    A 消息的发送的服务器时间
    corcre
        14
    corcre  
       2023-08-24 11:39:00 +08:00
    肯定是统一以服务器接收到的时间为准啊
    itskingname
        15
    itskingname  
       2023-08-24 12:18:58 +08:00
    应该是服务器收到 A 消息 的时间。
    zjw7sky
        16
    zjw7sky  
       2023-08-24 13:36:25 +08:00
    以服务器接收到 A 的时间为准
    zjw7sky
        17
    zjw7sky  
       2023-08-24 13:36:41 +08:00
    @zjw7sky 而且是服务器时间
    4kingRAS
        18
    4kingRAS  
       2023-08-24 14:14:57 +08:00
    顺序按消息 id ,不会按时间戳的,时间戳(无论云侧还是端侧)都非常不靠谱
    vzyw
        19
    vzyw  
       2023-08-24 15:45:06 +08:00
    服务器存消息的时间戳, 跟时区无关。 客户端把时间戳转换为本地时间。
    hiliyan0818
        20
    hiliyan0818  
       2023-08-24 16:09:10 +08:00
    按照产出的时间来确定
    dudubaba
        21
    dudubaba  
       2023-08-24 21:37:59 +08:00
    @rcj6056 服务器时间肯定是对的,那就是 A 发送后服务器收到消息,记录时间戳入库。然后等 B 上线后,触发了用户的上线订阅,然后开始拉取 B 的对应漫游消息,再推送给 B ,这个漫游消息的时间戳就是 A 发送时服务器记录的,此时会再次上传消息给服务器,告诉服务器已读(由客户端根据设备视窗实现),服务记录已读字段时间戳。
    layxy
        22
    layxy  
       2023-08-25 08:50:58 +08:00
    一切以服务器时间为准,否则 A 或则 B 修改本地时间可能出现时间错乱
    wkong
        23
    wkong  
       2023-08-25 09:26:50 +08:00
    既不是 A 消息的发送时间,也不是 B 消息的接受时间,是服务器收到 A 消息的时间。

    看我的 Github ,我们专业做 IM 的。
    Loitus
        24
    Loitus  
       2023-08-25 12:15:12 +08:00
    参考下 lamport 逻辑时钟,用服务器时间也是不对的,A 用户发消息 A B C ,可能到达服务器的时候 A B C 三条消息就乱序了 但是这三条消息有顺序的语意逻辑关系
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3901 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 05:14 PVG 13:14 LAX 22:14 JFK 01:14
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86