gpt4 book ai didi

node.js - GraphQL 订阅 : Max Listeners Exceeded Warning

转载 作者:搜寻专家 更新时间:2023-10-31 22:39:36 25 4
gpt4 key购买 nike

我们使用 GraphQL 订阅和 pubsub 来订阅帖子。

当发生超过 10 个订阅时,我们会收到 Node 警告“MaxListenersExceededWarning:检测到可能的 EventEmitter 内存泄漏。”

是否可以提高 pubsub 类中的最大听众数?

pubsub 类位于一个单独的模块中,如下所示:

import { PubSub } from 'graphql-subscriptions';

const pubsub = new PubSub();

export { pubsub };

订阅服务器如下所示:

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,
};

最佳答案

我编写了您正在使用的 graphql-subscriptions 包的原始实现,因此我可以在此处提供一些上下文。

graphql-subscriptions 中包含的简单 EventEmitter pubsub 库仅用于演示目的。 EventEmitter 并没有真正扩展到大量,它们在内存中,并且只有在您只有一个服务器时它们才会工作。

对于任何试图在生产环境中运行 GraphQL 订阅的人,我强烈建议使用不同的系统,例如 Redis 或 MQTT 到 graphql-redis-subscriptionsgraphql-mqtt-subscriptions .这将具有保持 GraphQL 服务器无状态(除了 websockets)的优势,因此易于水平扩展。

关于node.js - GraphQL 订阅 : Max Listeners Exceeded Warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com