[英]Which Kotlin Coroutine data source (Channel, Flow,…) to use?
我正在为 Android 编写一个消息传递应用程序(如 whatsapp,...),但我目前已经失去了使用最新协程发布的许多内容的最佳原语。 对于第 3 点和第 4 点中描述的队列实现使用什么(Channel、Actor、Flow、ChannelFlow,...)的建议,我将不胜感激。我的流程是这样的:
用户发送消息
消息存储到 DB(房间)。 因此,如果应用程序被杀死,消息不会丢失。
消息也提供给队列。 在这里使用什么(Actor、Channel、Flow、ChannelFlow)? 只要应用程序处于活动状态或第 5 点中描述的异常,此队列就应该处于活动状态。
3.a:我希望是否可以只保存到数据库,并且当队列为空以进行发送时,来自 Room 的 Flow 会重新查询内容,但我不知道这是否可能,因为对于每个插入/更新/删除,查询都会被触发,我将再次收到所有已经在队列中的消息......
我需要在队列的另一端获取消息并执行暂停 function 以发送消息吗?
如果注销并再次登录,如何关闭队列并重新创建它? 我猜应该取消并重新创建正在运行协程的 CoroutineScope,对吗?
谢谢你的帮助
我建议将枚举 state 添加到MessageEntity
(状态为QUEUED
、 SENDING
、 SENT
或类似的东西)
然后我将 go 使用以下单向流,同时考虑您的数据库 SSO(单一事实来源):
用户发送消息 -> 插入消息 -> 房间发出新的项目流 -> 触发QUEUED
项目的发送请求 -> 更新 state 的消息
Flow 有一个不错的 api 用于仅过滤掉上层需要的排放
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.