GraphQL Subscriptions: Max Exceeding Number of Listeners

We use GraphQL and pubsub subscriptions to subscribe to posts.

When more than 10 subscriptions occur, we get a warning node "MaxListenersExceededWarning memory leak detected: Possible EventEmitter error."

Is it possible to increase the maximum number of listeners in the pubsub class?

The pubsub class is inside a separate module and looks like this:

import { PubSub } from 'graphql-subscriptions';

const pubsub = new PubSub();

export { pubsub };
Run codeHide result

The subscription server is as follows:

import { SubscriptionManager } from 'graphql-subscriptions';
import { createServer } from 'http';
import { SubscriptionServer } from 'subscriptions-transport-ws';

import { pubsub } from './subscriptions';
import executableSchema from './executableSchema';

const WS_PORT = 8080;

const websocketServer = createServer((request, response) => {
  response.writeHead(404);
  response.end();
});

websocketServer.listen(WS_PORT, () => console.log(
  `Websocket Server is now running on http://localhost:${WS_PORT}`
));

const subscriptionManager = new SubscriptionManager({
  schema: executableSchema,
  pubsub: pubsub,
  setupFunctions: {
        newPost: (options, args) => {
         return {
            newPostChannel: {
               filter: (post) => {
                  return args.publicationId === post.relatedPublication.id;
               }
            },
         };
      },
  },
});

const subscriptionServer = new SubscriptionServer({
  subscriptionManager: subscriptionManager
}, {
  server: websocketServer,
  path: '/',
});


export {
  subscriptionServer,
};
Run codeHide result
+4
source share
2 answers

I wrote the original implementation of the graphql-subscriptions package you are using, so I can provide some context here.

pubsub EventEmitter, graphql, . EventEmitters , , , .

, GraphQL , , Redis MQTT graphql-redis-subscriptions graphql-mqtt-subscriptions. , , GraphQL ( -) , , .

+4

, pubsub, :

import { PubSub } from 'graphql-subscriptions';

const pubsub = new PubSub();
pubsub.ee.setMaxListeners(30); // raise max listeners in event emitter

export { pubsub };
Hide result
+1

Source: https://habr.com/ru/post/1676217/


All Articles