Articles of 连接池

Node.js lsof – 许多打开的数据库连接

当我在我的服务器上运行“lsof | grep node”(运行node.js应用程序)时,我得到了大约1000多行(db连接到端口9160)。 每行看起来像这样: node 17006 root 160u IPv4 1362100969 0t0 TCP localhost:47813->localhost:9160 (ESTABLISHED) 这是一个testingnode.js服务器,做一些非常简单的事情。 (使用Helenus模块将请求logging到Cassandra DB) 我很惊讶有这么多的开放式的连接,现在肯定不应该有1-2个连接。 这是否意味着我不能在Node应用程序中正确结束我的数据库连接? 我的代码如下。 谢谢。 var express = require('express') , routes = require('./routes') , app = express.createServer(); app.configure(function(){ app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); }); process.on('uncaughtException', function (err) { logger.error('Caught exception: ' + err); }); function respond_test(req, res, next) { var […]

node.js mySQL连接通过一个单例

我在node.js中为mySQL连接使用了一个singleton模式,并且只有一个连接可供整个应用程序使用,我担心的是如果单连接所持有的连接有一些超时设置。 这个连接应该在应用程序的整个生命周期中生活。 我search并find了一些使用池的持久性示例,但不知道这是否适用于此示例,没有连接池,组件之间只有一个要共享的连接,问题是,是否有一些超时设置会终止连接被搁置了很长时间之后? puremvc.define( { name: "common.model.connections.App", constructor: function() { var mysql = require("mysql"); this.connection = mysql.createConnection({ host: common.Config.mySQLHost, user: common.Config.mySQLUsername, password: common.Config.mySQLPassword, database: common.Config.mySQLDatabase }); this.connection.connect(); } }, { }, { NAME: "App", instance: null, connection: null, getInstance: function() { if(common.model.connections.App.instance == null) { common.model.connections.App.instance = new common.model.connections.Fico(); } return common.model.connections.App.instance; }, getConnection: function() […]

pipe理node-postgres查询

我已经阅读了node-postgres的API文档。 它build议我们使用pg对象来创build池式客户端。 而在pg.connect API文件中说: connect方法从客户端池中检索客户端,或者如果所有共用客户端都忙且池未满,则connect方法将创build一个新的客户端,将其第一个参数直接传递给客户端构造函数。 所以根据这个build议,使用pg.connect意味着“使用pg对象来创build池客户端”? 如果不是,那实际上是什么意思? 在我的实现示例中,我在我的路线中做了几个查询: app.get('/post', function(req, res) { pg.connect(dbconfig, function(err, client, done) { client.query('SELECT * FROM post', function(err, result) { res.render('post/list', { posts: result.rows }); }); }); }); app.get('/post/new', function(req, res) { res.render('post/new'); }); app.post('/api/v1/post', function(req, res) { var b = req.body; pg.connect(dbconfig, function(err, client, done) { client.query('INSERT INTO post (title, […]

Nodejs MongoDB连接池如何工作?

在下面的代码中,mongoClient.connect调用(默认情况下)打开一个由5个连接组成的池。 由于Node是单线程的,所以任何时候只能处理一个调用(func1或者func2)(第二个调用等到第一个调用完成),所以只有五个连接中的一个被使用。 使用Nodejs集群,如果我们派生多个实例,每个实例打开它自己的连接池(每个实例有5个连接)。 问题是,MongoDB连接池如何在Node环境中工作。 我们如何testing这个来演示同时使用同一个池中的多个连接? mongoClient.connect('mongodb://localhost', function(err, db){ app.get('/func1', function(req, res){ for (var i=0; i<100000; i++){ db.collection('test').insert({a:i}); } res.end(); }); app.get('/func2', function(req, res){ for (var i=0; i<100000; i++){ db.collection('test').insert({a:i}); } res.end(); }); });

knexjs承诺释放池连接

我目前使用knexjs.org ,承诺而不是常规callback,并使用池连接进行SQL查询。 第一次运行顺利。 但是现在我通常面临连接池的错误。 代码是这样的 knex('user_detail') .select('id','full_name','phone','email') .where('id', id_user) .then((result) => { resolve(result); }) .catch((error) => { reject(error); }) 但是现在我通常会得到错误连接超时和错误池连接。 为什么它得到一个错误的第一件事可能是因为我没有释放连接,但我有这样的代码, knex('user_detail') .select('id','full_name','phone','email') .where('id', id_user) .then((result) => { resolve(result); }) .catch((error) => { reject(error); }) .finally(() => { knex.destroy() }) 它适用于第一次尝试,但第二次尝试失败并出现错误There is no pool defined on the current client ,有时错误The pool is probably full 有人可以向我解释发生了什么事情,我怎么解决它? […]

池中使用的繁忙连接数

我在pg节点js模块中使用连接池。 据我了解,当你使用连接池,你的连接为你创build,并存储,当你需要它,一些方法诱发,你已经实例化连接。 现在关于pg: 简单的代码 pg.connect(conString, function (err, client, done) { if (err) { callback(err); } else { client.query('SELECT * FROM users', function (err, result) { done(); if (err) callback(err); callback(null, result.rows); }); } }); 当我调用pg.connect方法时,我假设,我已经从池中实例化连接,当我调用done我将连接返回到池中。 现在我想debugging我的应用程序,我可以忘记调用done或做不有效的方式。 如何打印繁忙连接的数量? 或者另一种debugging方式。 先谢谢你。 我有一些问题,当请求我的路线挂了30秒,我想是的,因为我没有返回到游泳池的连接。

NodeJS MySQL如何获得查询function以外的结果

我似乎无法弄清楚如何获得NodeJS MySQL池查询以外的结果。 下面是一些示例代码,以更好地解释我的意思。 var result = 'Hello world!'; var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 100, host : process.env.DB_HOST, user : process.env.DB_USERNAME, password : process.env.DB_PASSWORD, database : process.env.DB_DATABASE }); pool.query('SELECT * from user LIMIT 10', function (err, rows) { result = rows; }); res.send(result); 以上将返回“Hello world!” 而不是查询。 如果我console.log(结果)在pool.query函数内,它返回查询中的行,但我似乎无法获得该函数以外的数据。 我logging了function,并检查了所有相关的function,我想我只是缺less一些基本的东西。

Node + MongoDB – 连接池 – mongoldb-native

我试图实现一个优雅的代码,以解决与mongoldb本地节点的连接池。 但是,我没有成功为此做一个模块。 我肯定这是关于提升的事情,但我无法得到它。 Mongodb.js 'use strict'; var client = require('mongodb').MongoClient; var connectionString = undefined; var db = undefined; switch(process.env.NODE_ENV) { case 'production': connectionString = process.env.MONGOLAB_URI; break; case 'test': connectionString = 'mongodb://localhost:27017/test'; break; default: connectionString = 'mongodb://localhost:27017/development'; } client.connect(connectionString, function(err, database) { if (err) throw err; console.log('MongoDB running on ' + (process.env.NODE_ENV || 'development') + ' […]

什么时候应该在node.js mysql中使用连接池?

这是我在node.js中创buildMySQL连接的典型方法 var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '', database : 'address_book' }); var app = express(); connection.connect(function(err){ if(!err) { console.log("Database is connected … nn"); } else { console.log("Error connecting database … nn"); } }); 生产用途足够好吗? 什么时候应该使用连接池? 使用连接池有什么优点和缺点?

如何分享Android活动之间的socket.io连接?

在socket.io Android客户端示例项目中,我们读到: IO.socket()返回一个带有默认选项的http://chat.socket.io的套接字。 请注意,该方法会caching结果,所以您可以始终从任何Activity或Fragment中为url获取同一个Socket实例。 所以我决定testing一下,因为我的服务器上打开的套接字数量不等于客户端的数量。 我用下面的服务器: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function(req, res){ res.sendfile('index.html'); }); io.on('connection', function(socket){ console.log('- connect event '+socket.id); socket.on('disconnect', function () { console.log('- disconnect event from id '+socket.id); }); }); http.listen(3000, '0.0.0.0', function(){ console.log('. listening on *:3000'); }); 并开发了一个非常简单的Android应用程序,包含两个活动,每个打开socket.io连接到相同的服务器地址,并允许简单地切换活动。 我启动服务器并启动应用程序,这是我得到的输出。 . listening on *:3000 […]