AppSync/Graphql 多个id 的多个订阅或一个订阅?

AppSync/Graphql Multiple subscriptions or one subscriptions for multiple ids?

问题: 我们正在尝试使用 AWS 产品 AppSync 制作聊天应用程序,我们希望获得最佳性能,但我们在 AppSync 和 Graphql 中面临实时订阅问题,在某些情况下,单个用户需要处理大量订阅认为不是最好的解决方案,您有什么建议?

问题示例:

Mutation{
    addMessage(conversation_id=Int!, content:String!) : Message
}
Subscription{
   subscribeForNewMessages(convesration_id: Int!):Message
        @aws_subscribe(mutations: ["addMessage"])
}

这个设计的问题是用户需要调用这个订阅并持续监听每一个对话,我们预计如果对话数量巨大,这会让客户端不堪重负。

问题:

Q1: 我们正在努力实现的是一个订阅多个(conversation_id),这怎么可能? 这些人 (https://github.com/apollographql/apollo-client/issues/2633) 正在谈论类似的事情,我们测试了它但它不起作用,这是一个有效的解决方案吗?

Q2: 关于放大; amplify 在同时收听大量订阅时会表现良好吗?它会进行某种合并订阅和 websockets 还是会单独处理它们?

Q3: 您对这些设计有何评论?那里将有一项服务将为聊天参与者广播(调用带有客户端 ID 的突变)消息,并且客户端将仅订阅单个频道。像下面这样: 来源 2: 来源 2:

Q1/Q2

您必须进行多次订阅,aws ios/android/amplify sdks 可以处理订阅握手协议以实时更新数据。

看看here

Q3

我建议允许客户端订阅特定频道(即使这意味着多个订阅),以便可以在服务而不是客户端完成过滤逻辑,减少客户端代码,这也意味着您没有不用担心维护或可扩展性。