AppSync/Graphql 多个订阅还是多个 id 的一个订阅?

Ahm*_*hni 5 facebook chat real-time-data graphql aws-appsync

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

问题示例:

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

这种设计的问题在于,用户需要调用此订阅并继续收听每个对话,如果对话数量巨大,我们希望这会压倒客户端。

问题 :

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

Q2:关于放大;在同时收听数百个订阅时,放大会表现良好吗?它会合并订阅和 websockets 还是将它们分开处理?

Q3:您对这些设计有何评论?其中将有一个服务,它将为聊天参与者广播(使用客户端 ID 调用突变)消息,并且客户端将仅订阅单个频道。如下所示: src2 :用于聊天应用程序的 AWS AppSync src2 :订阅 AWS AppSync 中的群组/私人聊天列表

小智 3

Q1/Q2

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

看看这里

第三季度

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