Я работаю над функцией вставки документа в базу данных mongoDb с использованием модуля node-mongodb-native. Все работает, кроме случаев, когда я вызываю вставку нескольких документов подряд. Я использую цикл for
, чтобы проверить, как моя функция реагирует на одновременную вставку нескольких документов.
var server = new Server("xxx.xxx.xxx.xxx", 27017, {auto_reconnect: true, poolSize: 100});
var db = new Db("testDb", server, {safe: false});
module.exports.insert = function(document){
var database;
function db_open(err, db_local){
if(err) throw err;
database = db_local;
database.collection("rooms", handle_insert);
}
function handle_insert(err, collection){
if(err) throw err;
collection.insert(document);
database.close();
}
db.open(db_open);
};
for(var i=0; i<100; i++){
module.exports.insert({name : "test"});
}
Когда я запускаю этот код, я получаю сообщение об ошибке db object already connecting, open cannot be called multiple times
Чтобы решить проблему, я решил создавать новый экземпляр Server
и Db
при каждом вызове функции:
module.exports.insert = function(document){
var database;
var server = new Server("xxx.xxx.xxx.xxx", 27017, {auto_reconnect: true, poolSize: 100});
var db = new Db("testDb", server, {safe: false});
function db_open(err, db_local){
if(err) throw err;
database = db_local;
database.collection("rooms", handle_insert);
}
function handle_insert(err, collection){
if(err) throw err;
collection.insert(document);
database.close();
}
db.open(db_open);
};
for(var i=0; i<100; i++){
module.exports.insert({name : "test"});
}
Но теперь я получаю connection closed
, брошенный функцией db_open. Я действительно не понимаю, почему мое соединение закрывается между моментом, когда я создаю db
и когда мой код вызывает db_open
.
Вы имеете представление о том, что происходит ?
Спасибо :)
(Извините, если мой английский не очень хороший)
ИЗМЕНИТЬ Я нашел этот веб-сайт, на котором объясняется, что проблема вызвана слишком долгое время tcp_keepalive. Проблема с этим решением - моя рабочая станция (Cloud 9). У меня нет разрешения на доступ к файлу / proc / sys / net / ipv4 / tcp_keepalive_time