android - Messenger 应用程序如何更新移动应用程序的用户活动(活动、非活动、5 分钟前活动)?
问题描述
Messenger 应用程序如何更新移动应用程序的用户活动(活动、非活动、5 分钟前活动)?
- 网络套接字
- 服务器发送事件 (SSE)
每当您打开您的 Messenger 应用程序时,您都会看到谁是活跃的,谁不是活跃的,Facebook 如何从客户端(移动应用程序)将这些数据发送给用户,如何保持此列表更新?
解决方案
我已经绘制了一个系统设计,您可以从中获得有关聊天类应用程序背后架构的基本想法。
Step1:订阅通知: 当设备启动时,第一步是连接到服务器并自我介绍,这是使用API发生的。例如,设备向“API 服务器”发送请求并说,嘿,我是“用户 A”,我想订阅状态通知、消息通知和其他类型的推送通知。
Step2:连接到集线器: 然后客户端(设备)使用 WS 协议连接到 Web-Socket 并监听事件以获取来自服务器的推送通知。
Step3:服务器生成状态消息、聊天消息等消息: 事件发生,因此服务器为该事件生成消息(如状态消息、聊天消息等事件)并发布到消息代理(Kafka)。
Step4:消费消息并将通知推送给客户端: 当消息代理(Kafka)中准备好新消息时,另一个服务会使用来自消息代理的消息,并通过 web-socket(WS 协议)将通知推送给活动的客户端。
Step5:客户端更新ui: 在第二部分,我们提到客户端连接到web-socket。当从服务器端收到新的推送通知时,客户端会对其进行解释并更新 UI。
这就是 Facebook Messenger 等服务背后的理念,它们已经大规模实施。
推荐阅读
- sql-server-2016 - SQL - 选择最后一个和上一个与最后一个不同
- c# - 为什么 IsEnabled 是 ILogger 接口的一部分?
- javascript - 如何在localstoage中设置?
- visual-studio-code - vs code + pytest:无法识别的参数:rootdir(在 Windows 上)
- python - 将数据点映射到交互式地图
- python - 类型错误:pairplot() 得到了一个意外的关键字参数“颜色”
- azure - 使用 FTP 部署的 Azure 函数,如何解决不存在的 docker 容器问题
- dictionary - 在地图中合并嵌套值的正确方法?
- php - Symfony - 外键的 Doctrine Annotations 默认值
- python - Coursera - 适用于所有人的 Python - 前 5.2