在 AWS AppSync 中订阅群组/私人聊天列表
Subscribe to a List of Group / Private Chats in AWS AppSync
我目前正在评估 AWS AppSync 作为消息传递应用程序的后端解决方案。
用户将有一个视图来探索新的聊天组和一个不同的视图,他们可以在其中看到他们加入的和私人聊天的列表(在列表中应该显示聊天的名称和最后一条消息)。当然,每个聊天都会有一个显示所有消息的详细视图。
问题是如何设计订阅部分。我发送消息的 Mutation 看起来像这样:
createMessage(
content: String,
conversationId: ID!,
createdAt: String!,
id: ID!
): Message
根据订阅文档,我只有两种可能性来设计我的订阅。我要么订阅所有新消息,要么订阅来自特定对话的所有新消息,方法是使用对话 ID 作为参数。
所以在我的例子中,我需要获取所有用户对话,然后为每个对话进行订阅调用。不知何故,这感觉像是个问题,但我没有看到不同的方式(例如,目前无法进行自定义过滤 (according to this link))
是否有更好的方法来订阅特定消息子集的新消息(仅在我订阅的对话中)?
客户端上可能有 100 多个活动订阅有问题吗?
提前致谢
卢卡
你是对的。开箱即用的唯一两种方法是:
- 使用参数订阅每个对话。
- 在客户端订阅所有对话和过滤消息。
如果您使用参数(选项 #1)订阅每个对话,则可以在一个 HTTP 请求中批量发送订阅请求。例如。在一个请求中发送最多 50 个具有不同对话参数的订阅。
还有第三种选择,你可以做更多的工作来保证客户端的效率。此选项涉及为客户设置对话的反向索引。
- 创建一个索引,您可以在其中找到进行对话的客户。客户端将使用一个参数(可能是客户端 ID)进行一次订阅。当您发布消息时,您有一个中间步骤(可能是一个订阅所有消息的后端作业),您可以在其中查看索引以确定哪些客户端对您发布消息的对话感兴趣。然后为每个客户发布。
我目前正在评估 AWS AppSync 作为消息传递应用程序的后端解决方案。
用户将有一个视图来探索新的聊天组和一个不同的视图,他们可以在其中看到他们加入的和私人聊天的列表(在列表中应该显示聊天的名称和最后一条消息)。当然,每个聊天都会有一个显示所有消息的详细视图。
问题是如何设计订阅部分。我发送消息的 Mutation 看起来像这样:
createMessage(
content: String,
conversationId: ID!,
createdAt: String!,
id: ID!
): Message
根据订阅文档,我只有两种可能性来设计我的订阅。我要么订阅所有新消息,要么订阅来自特定对话的所有新消息,方法是使用对话 ID 作为参数。 所以在我的例子中,我需要获取所有用户对话,然后为每个对话进行订阅调用。不知何故,这感觉像是个问题,但我没有看到不同的方式(例如,目前无法进行自定义过滤 (according to this link))
是否有更好的方法来订阅特定消息子集的新消息(仅在我订阅的对话中)? 客户端上可能有 100 多个活动订阅有问题吗?
提前致谢 卢卡
你是对的。开箱即用的唯一两种方法是:
- 使用参数订阅每个对话。
- 在客户端订阅所有对话和过滤消息。
如果您使用参数(选项 #1)订阅每个对话,则可以在一个 HTTP 请求中批量发送订阅请求。例如。在一个请求中发送最多 50 个具有不同对话参数的订阅。
还有第三种选择,你可以做更多的工作来保证客户端的效率。此选项涉及为客户设置对话的反向索引。
- 创建一个索引,您可以在其中找到进行对话的客户。客户端将使用一个参数(可能是客户端 ID)进行一次订阅。当您发布消息时,您有一个中间步骤(可能是一个订阅所有消息的后端作业),您可以在其中查看索引以确定哪些客户端对您发布消息的对话感兴趣。然后为每个客户发布。