问题:
IM是互联网中非常典型的独立系统,麻雀虽小但五脏俱全,非常值得深入研究和探讨;继上次IM相关题目之后,我们继续讨论IM相关话题。 关于IM系统【消息收发模型】的相关描述,下面说法错误的是哪几项?
A、通常可以将消息收发流程划分为三个阶段:生产消息阶段、推送消息阶段、消息确认阶段;
B、消息发送方发送消息到服务端后,服务端必须先回复然后再落库,以保证消息生产的及时性和可靠性;
C、在服务端推送消息阶段,服务端首先需要通过路由数据确认消息接收方的在线状态和连接地址,然后再推送消息;
D、消息确认阶段,即服务端等待确认消息是否被客户端接收;若服务端等待超时,需要主动回调客户端接口完成确认,类似于 RocketMQ的事务消息处理模型。
正确答案:BD
解析:
A选项:客户端X发消息给客户端Y,通常会经过三个阶段:生产消息阶段(客户端X发送消息到服务端,服务端经过一系列逻辑处理后发送回复包到客户端X),推送消息阶段(服务端经过一系列逻辑处理后推送消息到客户端Y),消息确认阶段(服务端等待客户端Y发送ACK数据包并进行逻辑处理)。
B选项:消息发送方发送消息到服务端后,服务端正确的处理方式是 先落库再回复,保证消息的可靠性;否则容易出现消息没来得及落库导致消息丢失的问题。
C选项:在服务端推送消息阶段,服务端首先需要访问中央存储(缓存)判断消息接收方是否在线,如果在线则获取其连接的fd,然后基于fd推送消息。
D选项:在线消息确认阶段,如果服务端等待客户端发送ack包超时时,直接重新推送消息 或 按离线处理即可,回调客户端接口流程繁琐且工作量很大,实不必要。
作者:棕生 | 公众号—— 架构之魂
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。