繁体   English   中英

带有多线程NodeJS服务器的Graphql订阅

[英]Graphql subscription with multithreaded nodeJS server

我正在尝试在多线程体系结构中创建graphql订阅服务。

例如,如果我创建一个如下订阅

const SOMETHING_CHANGED_TOPIC = 'something_changed';

export const resolvers = {
  Subscription: {
    somethingChanged: {
      subscribe: () => pubsub.asyncIterator(SOMETHING_CHANGED_TOPIC),
    },
  },
}

并且在我的nodeJS集群上运行了多个相同的nodeJS服务器的实例,我不希望每个实例在每次进行新的订阅发布后都将订阅事件发送给客户端。 我只希望一个(当然最好在群集之间实现负载平衡)负责向客户端发送订阅。

我现在想到的唯一方法是创建一个隔离的服务器,该服务器负责订阅事件,并且仅作为客户端从单个来源接收订阅事件。 但是,如果我分散负责预订的服务器的负载,则会发生我上面提到的相同的多线程问题。

当有多线程nodeJS后端时,如何确保仅向客户端发送单个订阅事件? 只能使用客户端过滤吗? 即忽略已经发生的事件-但是,随着订阅的增加,这是对资源的严重浪费。

在这种情况下,我将Redis用作PubSub,这样您就拥有了“一个真实的来源”。 https://github.com/tomyitav/redis-messaging-manager

我敢肯定还有很多其他类似的库

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM