什么将是重用CouchBase连接器的最佳方式

我正在使用下面的代码来连接CouchBase

couchbase.connect(config.CouchBaseConnector, function (err, CouchBaseDB) { if (err) { throw (err) } CouchBaseDB.set(keyPush, docPush, function (err, meta) { if (err) { console.log(err); } }); } 

但是它创build了多个连接。

有人可以帮我解决这个问题。 基本上我想要做一些连接池,并继续使用。


我偶然发现了一个来自CouchBase的文档。 但无法弄清楚它是如何工作的,以及在Windows 7 64位版本上部署相同的步骤。


更新
我认为moxi-server目前还不能用于Windows操作系统。

Couchbase Node SDK本身就是一个连接池。 它负责pipe理与集群的连接,在服务器拓扑结构中发生任何变化(添加/删除/失败的节点)

这就是为什么大多数情况下,您将代码放入全局callback方法并重新使用连接

 var express = require('express'), driver = require('couchbase'), routes = require('./routes'); dbConfiguration = { "hosts": ["my-couchbase-server:8091"], "bucket": "bucket" } driver.connect(dbConfiguration, function(err, cb) { if (err) { throw (err) } // put your application logic here }); 

如果要使用全局variables,则需要等待callback,并确保在使用连接之前build立连接。

我发现下面的代码正在为我工​​作。 请任何人有更好的解决scheme,请张贴,我总是欢迎。

 GLOBAL.CouchBaseDBConnection = undefined; function OpenCouchBase(callback) { if (CouchBaseDBConnection == undefined) { couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) { if (err) return console.log("Failed to connect to the CouchBase"); else { CouchBaseDBConnection = couchbaseOpenCon callback(null, couchbaseOpenCon); } }); } else { callback(null, CouchBaseDBConnection); } }; module.exports.OpenPoolCouchBase = OpenCouchBase; 

您可以为Node: node-pool使用通用资源池模块

它是通用池,所以你可以根据自己的需要进行调整。

编辑:

以下是示例代码:

 var poolModule = require('generic-pool'); var pool = poolModule.Pool({ name : 'couch', create : function(callback) { couchbase.connect(config.CouchBaseConnector, function (err, couchbaseOpenCon) { if (err) return console.log("Failed to connect to the CouchBase"); else { CouchBaseDBConnection = couchbaseOpenCon callback(null, couchbaseOpenCon); } }); }, destroy : function(client) { client.end(); }, max : 10, // specifies how long a resource can stay idle in pool before being removed idleTimeoutMillis : 30000, // if true, logs via console.log - can also be a function log : true }); // acquire connection - callback function is called once a resource becomes available pool.acquire(function(err, client) { if (err) { // handle error - this is generally the err from your // factory.create function } else { console.log("do whatever you want with the client ..."); pool.release(client); }); } });