使用哪个 Kotlin Coroutine 数据源(Channel、Flow 等)?
Which Kotlin Coroutine data source (Channel, Flow,...) to use?
我正在为 Android 编写一个消息传递应用程序(如 whatsapp,...),我目前从最新协程发布的许多东西中丢失了最好的原语。对于第 3 点和第 4 点中描述的队列实现使用什么(Channel、Actor、Flow、ChannelFlow 等)的一些建议,将不胜感激。
我的流程是这样的:
用户发送消息
消息存储到数据库(房间)。因此,如果应用程序被杀死,消息不会丢失。
消息也被提供给队列。在这里使用什么(Actor、Channel、Flow、ChannelFlow)?只要应用程序处于活动状态或出现第 5 点中描述的异常,此队列就应该处于活动状态。
3.a:我希望是否可以只保存到数据库,并且当队列为空以供发送时,来自 Room 的 Flow 会重新查询内容,但我不知道这是否可能,因为对于每个 insert/update/delete,查询将被触发,我将再次收到所有已经在队列中的消息...
队列的另一端需要什么来从中获取消息并执行发送消息的挂起函数?
如果注销并再次登录,如何关闭队列并重新创建队列?我猜 运行 协程所在的 CoroutineScope 应该取消并重新创建,对吗?
感谢您的帮助
我建议向 MessageEntity
添加枚举状态(状态为 QUEUED
、SENDING
、SENT
或类似的状态)
然后我将采用以下单向流,同时将您的数据库视为 SSO(单一真相来源):
用户发送消息 -> 插入消息 -> Room 发出新的项目流 -> 触发 QUEUED
项目的发送请求 -> 更新消息状态
Flow 有一个很好的 api 可以过滤掉你在上层需要的排放物
我正在为 Android 编写一个消息传递应用程序(如 whatsapp,...),我目前从最新协程发布的许多东西中丢失了最好的原语。对于第 3 点和第 4 点中描述的队列实现使用什么(Channel、Actor、Flow、ChannelFlow 等)的一些建议,将不胜感激。 我的流程是这样的:
用户发送消息
消息存储到数据库(房间)。因此,如果应用程序被杀死,消息不会丢失。
消息也被提供给队列。在这里使用什么(Actor、Channel、Flow、ChannelFlow)?只要应用程序处于活动状态或出现第 5 点中描述的异常,此队列就应该处于活动状态。
3.a:我希望是否可以只保存到数据库,并且当队列为空以供发送时,来自 Room 的 Flow 会重新查询内容,但我不知道这是否可能,因为对于每个 insert/update/delete,查询将被触发,我将再次收到所有已经在队列中的消息...
队列的另一端需要什么来从中获取消息并执行发送消息的挂起函数?
如果注销并再次登录,如何关闭队列并重新创建队列?我猜 运行 协程所在的 CoroutineScope 应该取消并重新创建,对吗?
感谢您的帮助
我建议向 MessageEntity
添加枚举状态(状态为 QUEUED
、SENDING
、SENT
或类似的状态)
然后我将采用以下单向流,同时将您的数据库视为 SSO(单一真相来源):
用户发送消息 -> 插入消息 -> Room 发出新的项目流 -> 触发 QUEUED
项目的发送请求 -> 更新消息状态
Flow 有一个很好的 api 可以过滤掉你在上层需要的排放物