与node-mongodb-native的多个连接

时间:2013-06-27 16:34:06

标签: javascript node.js mongodb node-mongodb-native database


我正在使用node-mongodb-native模块在mongoDb数据库中插入文档的函数。一切正常,除非我呼叫插入多个文件背靠背。我使用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 为解决此问题,我决定在每次调用函数时创建ServerDb的新实例:

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"});
}

但是现在我被db_open函数抛出了connection closed 我真的不明白为什么我的创建db和我的代码调用db_open之间的连接正在关闭。 你知道发生了什么吗?

谢谢:)

(对不起,如果我的英语不是很好)

修改的 我发现这个website解释说问题是由于tcp_keepalive时间过长造成的。这个解决方案的问题是我的工作站(Cloud 9)。我没有权限访问文件/ proc / sys / net / ipv4 / tcp_keepalive_time

1 个答案:

答案 0 :(得分:1)

我认为您的问题与TCP keep-alive无关。就像错误消息所说的那样,您只是尝试多次打开相同的连接(每次调用insert方法时)。在第一次调用open()之前,不要每次调用insert(),只需调用一次,并确保回调返回。您可以在同一连接上执行的同时插入数量没有硬性限制,因为它们都是异步的。