【自问自答】Web IM 消息如何设计消息的结构呢?

如何设计消息的结构,可以满足我们后续的扩展。并且保证之前老版本显示正常。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
阅读 1.3k
1 个回答

我介绍一下消息的数据结构设计吧。如下,可以看到一共四条消息,两种消息类型(文本、图片),那我们这个数据应该如何描述呢?

image.png

{
    sendUserId: 'lilnong.top',
    receiverUserId: 'QAQ',
    msgType: '1', // 数据类型:消息可以包含不同类型的数据,如文本、图片、视频、红包等。这里可以服务端设计一个枚举类型就完事。
    msgText: '[不支持的消息类型]', // 纯文本消息,这里在会话列表中显示
    msgText: '[图片]', // 也可以在推送中显示给用户看
    msgText: 'chatgpt 是不是再骗我', // 所以也可以当做是不支持时的降级文本
    msgExt: { // 这里就是用来描述数据的,和 msgType 一一对应,如图片就是描述图片的。
      "url": "https://a.b.c/d.jpg",
      "width": "1024",
      "height": "2",
    },
    sendTime: 11111111111,// 发送时间
    msgId: 11111, //用来标识当前消息,这个是在服务端做过去重的,客户端用来当唯一键构建自己的uuid

    md5: 'xxxx', // 可以增加一下安全性校验,不用也无所谓。
}

可以看到,我们所有的版本都是可以显示 msgText 的。如果判断 msgType 是支持的,那么就可以通过 json 自己选择渲染方式了。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题