繁体   English   中英

使用哪个 Kotlin 协程数据源(Channel、Flow、...)?

[英]Which Kotlin Coroutine data source (Channel, Flow,…) to use?

我正在为 Android 编写一个消息传递应用程序(如 whatsapp,...),但我目前已经失去了使用最新协程发布的许多内容的最佳原语。 对于第 3 点和第 4 点中描述的队列实现使用什么(Channel、Actor、Flow、ChannelFlow,...)的建议,我将不胜感激。我的流程是这样的:

  1. 用户发送消息

  2. 消息存储到 DB(房间)。 因此,如果应用程序被杀死,消息不会丢失。

  3. 消息也提供给队列。 在这里使用什么(Actor、Channel、Flow、ChannelFlow)? 只要应用程序处于活动状态或第 5 点中描述的异常,此队列就应该处于活动状态。

    3.a:我希望是否可以只保存到数据库,并且当队列为空以进行发送时,来自 Room 的 Flow 会重新查询内容,但我不知道这是否可能,因为对于每个插入/更新/删除,查询都会被触发,我将再次收到所有已经在队列中的消息......

  4. 我需要在队列的另一端获取消息并执行暂停 function 以发送消息吗?

  5. 如果注销并再次登录,如何关闭队列并重新创建它? 我猜应该取消并重新创建正在运行协程的 CoroutineScope,对吗?

流程图

谢谢你的帮助

我建议将枚举 state 添加到MessageEntity (状态为QUEUEDSENDINGSENT或类似的东西)

然后我将 go 使用以下单向流,同时考虑您的数据库 SSO(单一事实来源):

用户发送消息 -> 插入消息 -> 房间发出新的项目流 -> 触发QUEUED项目的发送请求 -> 更新 state 的消息

Flow 有一个不错的 api 用于仅过滤掉上层需要的排放

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM