V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
rcj6056
V2EX  ›  Android

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

  •  1
     
  •   rcj6056 · Aug 24, 2023 · 13919 views
    This topic created in 983 days ago, the information mentioned may be changed or developed.

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

    那么这个时候

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

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

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

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

    看我的 Github ,我们专业做 IM 的。
    Loitus
        24
    Loitus  
       Aug 25, 2023
    参考下 lamport 逻辑时钟,用服务器时间也是不对的,A 用户发消息 A B C ,可能到达服务器的时候 A B C 三条消息就乱序了 但是这三条消息有顺序的语意逻辑关系
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   871 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 126ms · UTC 22:57 · PVG 06:57 · LAX 15:57 · JFK 18:57
    ♥ Do have faith in what you're doing.