我在节点中有一个实现,其中的API在被调用时会做一些处理,并在返回响应之前等待另一个函数的事件。当在本地运行并且在AWS的单个实例中运行时,这种方法很好用,但是当涉及多个实例时,我认为有些问题是因为从一个实例调用了API,而在另一个实例中发射了发射器。有什么方法可以在所有实例中保持侦听器和发射器相同?
答案 0 :(得分:0)
AFAIU,您认为从一个进程发出的事件是在另一个进程中处理的,但是据我所知,情况永远不会如此,因为每个进程都有自己的内存,并且事件仅与该进程相关联。 / p>
我添加了一个示例代码,演示了我的意思。也许如果您发布您所引用的代码,我们可以检查出了什么问题。
const cluster = require("cluster");
const EventEmitter = require("events");
if (cluster.isMaster) {
cluster.fork();
const myEE = new EventEmitter();
myEE.on("foo", arg =>
console.log("emitted from ", arg, "received in master")
);
setTimeout(() => {
myEE.emit("foo", "master");
}, 1000);
} else {
const myEE = new EventEmitter();
myEE.on("foo", arg => console.log("emitted from", arg, "received in worker"));
setTimeout(() => {
myEE.emit("foo", "client");
}, 2000);
}