当前位置: 首页 > news >正文

架构师面试(十一):消息收发

问题

IM 是互联网中非常典型的独立的系统,麻雀虽小但五脏俱全,非常值得深入研究和探讨,继上次IM相关题目之后,我们继续讨论IM相关话题。 关于IM系统【消息收发模型】的相关描述,下面说法错误的有哪几项?

A. 通常可以将消息收发流程划分为三个阶段:生产消息阶段、推送消息阶段、消息确认阶段;

B. 消息发送方发送消息到服务端后,服务端必须先回复然后再落库,以保证消息生产的及时性和可靠性;

C. 在服务端推送消息阶段,服务端首先需要通过路由数据确认消息接收方的在线状态和连接地址,然后再推送消息;

D. 消息确认阶段,即服务端等待确认消息是否被客户端接收;若服务端等待超时,需要主动回调客户端接口完成确认,类似于 RocketMQ 的事务消息处理模型。

解析

A 选项:客户端X发消息给客户端Y,通常会经过三个阶段:生产消息阶段(客户端X发送消息到服务端,服务端经过一系列逻辑处理后发送回复包到客户端X),推送消息阶段(服务端经过一系列逻辑处理后推送消息到客户端Y),消息确认阶段(服务端等待客户端Y发送ACK数据包并进行逻辑处理)。

B 选项:消息发送方发送消息到服务端后,服务端正确的处理方式是 先落库再回复,保证消息的可靠性;否则容易出现消息没来得及落库导致消息丢失的问题。

C 选项:在服务端推送消息阶段,服务端首先需要访问中央存储(缓存)判断消息接收方是否在线,如果在线则获取其连接的fd,然后基于fd推送消息。

D选项:在线消息确认阶段,如果服务端等待客户端发送 ack 包超时时,直接重新推送消息 或 按离线处理即可,回调客户端接口流程繁琐且工作量很大,实不必要。

正确答案

BD

相关文章:

  • 重邮数字信号处理-实验三z 变换及离散 LTI 系统的 z 域分析
  • Linux之网络管理配置(Network Configuration Management in Linux)
  • 可视化+图解:轻松搞定链表
  • OpenIndiana Hipster系统安装配置
  • MyBatis-Plus 与 Spring Boot 的最佳实践
  • 实现NTLM relay攻击工具的Python代码示例
  • zabbix图表中文显示方框
  • dify在腾讯云服务器上部署
  • 爬虫代理技术深度解析:从原理到实战应用
  • Billing的patient balance的2个例子
  • Spring Cloud Alibaba OpenFeign 实战:打造稳定高效的远程调用
  • OpenBMC:BmcWeb connect读取http请求
  • C++入门——输入输出、缺省参数
  • HCIA-路由重分布
  • V90伺服电机初调试
  • Python第十五课:机器学习入门 | 从猜想到预测
  • react基本功
  • After Effects的图钉与关键帧动画
  • STM32之I2C硬件外设
  • Python应用程序健康检查与监控系统的实现
  • 石家庄核酸检测/seo查询排名系统
  • 最新网站建设技术/网站制作工具有哪些
  • 网站服务器租用还是自买/新闻软文广告
  • 阿里巴巴做企业网站/网络营销专业可以干什么工作
  • 仪器仪表行业网站建设/冯耀宗seo课程
  • 四川建设厅报名网站/办公软件速成培训班