rcj6056
V2EX  ›  Android

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

  •  1
     
  •   rcj6056 · Aug 24, 2023 · 15107 views
    This topic created in 1178 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
    Znemo
    Aug 24, 2023
    1
    作为用户,直觉认为应该是 A 消息的发送时间。
    kamto
    kamto
    Aug 24, 2023
    2
    一般都用 A 投递消息到服务器成功的时间吧
    richangfan
    richangfan
    Aug 24, 2023
    3
    市面上这么多 IM 应用,哪有按接收时间算的
    flyqie
    flyqie
    Aug 24, 2023 via Android
    4
    敢用 B 的时间,绝对会被用户打爆。

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

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

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