我一直在将MongoDB changeStreams与Node.js和socket.io一起使用;
我正在使用一种发布订阅体系结构,对于每个订阅,他都应该用新的订阅替换以前的changeStream。
逻辑如下:
用于订阅的伪代码
// If it has a changeStream
if (socket.dbWatcher["users"]) {
// close changeStream
socket.dbWatcher["users"].removeAllListeners("change");
socket.dbWatcher["users"].close();
}
// Replace with new changeStream and pipeline
socket.dbWatcher["users"] = db.collection("users").watch(pipeline, {resumeAfter})
.on("change", (change) => {
socket.emit("users", change)
})
事情进展缓慢,所以我检查了连接数,结果超出了集合数(16个集合对29个连接)。
套接字断开连接后,我将关闭所有changeStreams,但连接仍然存在(数据库)。我增加了poolSize,但是有29个连接是不正常的。
这是我用来检查连接的mongodb命令:db.serverStatus().connections
答案 0 :(得分:0)
您可以在此处查看有关关闭变更流的文档:https://docs.mongodb.com/manual/changeStreams/#resume-a-change-stream
正如您在node driver API中看到的那样,变更流上有一个close()
方法。
但是,我不确定与MongoDB changestreams快速关闭/重新打开连接是否会有效。最好观察整个用户集合。
设计的changestream功能并非真正适用于传统的pubsub模式。有关更多详细信息,请参见此问题:Severe performance drop with MongoDB Change Streams