簡體   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