跳转至

有度消息收发

1.概述

1、消息的正常发送与接收是有度作为企业级即时沟通软件最为基础的功能之一。

2、有度的消息记录在服务端和客户端本地都有保存,登录客户端时,会优先加载本地数据库保存的消息记录。

3、有度的不丢消息机制,可保证在沟通过程中,不会因为网络故障或机器故障,而出现消息丢失或重复发送的情况。

2.不丢消息机制

2.1.如何避免发送消息重复

  • 发送消息请求包含全局唯一ID;
  • 服务器通过缓存对比ID过滤重复消息。

2.2.邮件同步模式接收消息

  • 主动通知;

  • 客户端上线同步;

  • 已读状态设置;

  • 客户端收取消息失败的重试机制。

3.功能逻辑说明

3.1.消息发送

  • 当用户A向用户B发送新消息时,用户A的客户端会调用服务器发消息的HTTPS接口,将内容发送到服务器本地存储,服务器会更新会话信息,之后再根据消息的会话ID查询到会话成员B。

客户端通过TCP(TLS Socket)通道登录成功,服务器返回用于https信息交互的token。 客户端将发送消息内容先进行base64,然后放进json协议包。 客户端将json协议包和token,通过https协议提交给服务器。 服务器验证token身份合法,将整个json数据包进行加密,把加密后的消息保存进leveldb或mongdb。

  • 消息发送演示图

图示(1)+(2)+(3)属于一个事务,发送消息只有落地才算成功;中间任何一个点出现问题,服务器都会告诉客户端发送失败。

3.2消息接收

  • 当用户A向用户B发送新消息时,如果会话成员B在线,则服务器会向B推送tcp消息数据包,此时用户B就能实时收到消息;
  • 当用户A向用户B发送新消息时,如果会话成员B不在线,服务器就会查询一下B是否注册第三方推送,如果有则直接将消息推送给用户B,反之,则不进行推送,只有用户B重新上线,服务器才会进行新消息推送。
  • 当用户B收到新消息时,服务器会从TCP连接通道向客户端发送一条通知,通知中包含出现新消息的会话ID和会话最新消息的消息ID等,客户端根据会话ID和消息ID去服务器查询相关的消息数据,将内容处理并显示在客户端界面上。