我一直在用MongoDB changeStreams和Node.js和socket.io;
我使用的是一种pub-sub架构,对于每一个订阅,他都应该用新的订阅替换以前的changeStream。
逻辑是这样的:
pseudoCode订阅
// 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
发布于 2019-08-01 21:36:15
您可以在这里看到关闭changestream的文档:https://docs.mongodb.com/manual/changeStreams/#resume-a-change-stream
正如您在节点驱动程序API中所看到的,在changestream上有一个close()方法。
但是,我不太确定用MongoDB changestreams快速关闭/重新打开连接是否会有效果。最好只是观察整个用户集合。
所设计的变更功能并不真正适用于传统的公共模式。有关详细信息,请参阅此问题:严重性能下降与MongoDB更改流
https://stackoverflow.com/questions/53729702
复制相似问题