我正在使用 mongodb 开发 React Native 应用程序。 我使用的是领域节点 SDK 12.13.1。 React Native 版本是 0.75.4.
谁能教我这是什么问题吗?
我当前的代码如下。
try {
var db = await MongoEngine.getDB();
var collection = db.collection("Notification");
var changeStream = collection.watch();
for await (var change of changeStream) {
this.changeListeners.forEach(listener => {
try {
listener.callback();
} catch(error) {
console.error("error: ", error.message);
}
});
}
} catch(error) {
console.error("error: ", error);
}
这里 MongoEngine.getDB() 只是连接到 mongdo atlas 服务应用程序。
调用此函数时,不会发生错误,但一段时间后(大约几分钟)此函数失败并显示 [AbortError: Aborted]
在 MongoDB 中使用更改流时,连接可能会在一段时间不活动后中止。这通常是由于数据库或网络配置关闭空闲连接以节省资源所致。
潜在的解决方案包括:自动重连和更新配置,以保持更长时间的空闲连接。
async function watchCollection() {
while (true) {
try {
const db = await MongoEngine.getDB();
const collection = db.collection("Notification");
const changeStream = collection.watch([], { maxAwaitTimeMS: 60000 });
for await (const change of changeStream) {
this.changeListeners.forEach(listener => {
try {
listener.callback();
} catch (error) {
console.error("Callback error: ", error.message);
}
});
}
} catch (error) {
console.error("Stream error: ", error.message);
await new Promise(resolve => setTimeout(resolve, 5000)); // Retry delay
}
}
}
另一种选择:
在调用 watch() 时设置 maxAwaitTimeMS,以指定服务器在返回空结果之前等待新更改的最长时间(以毫秒为单位)。它有助于保持连接活跃: