首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-mysql连接池

node-mysql连接池
EN

Stack Overflow用户
提问于 2011-07-18 17:58:36
回答 2查看 22.8K关注 0票数 14

我使用的是node-mysql模块(https://github.com/felixge/node-mysql) OR (http://utahjs.com/2010/09/22/nodejs-and-mysql-introduction/)。

此API是否也处理连接池?

我的意思是,对于每个用户请求,我都会调用Client.connect()来查询MySQL并释放连接:Client.end()

这是正确的方式吗,或者我应该在代码中只连接/断开连接一次。

我正在从这个文档中学习:https://github.com/felixge/node-mysql/blob/master/Readme.md

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-19 08:39:45

更新: 2013年2月- node-mysql增加了对池的支持,请参阅docs

使用内置池的示例:

代码语言:javascript
复制
var pool = require('mysql').createPool(opts);

pool.getConnection(function(err, conn) {
  conn.query('select 1+1', function(err, res) {
    conn.release();
  });
});

2013年之前的解决方案:

您可以使用node-poolmysql-pool,也可以使用自己的简单循环调度池

代码语言:javascript
复制
function Pool(num_conns)
{
    this.pool = [];
    for(var i=0; i < num_conns; ++i)
        this.pool.push(createConnection()); // your new Client + auth
    this.last = 0;
}

Pool.prototype.get = function()
{
    var cli = this.pool[this.last];
    this.last++;
    if (this.last == this.pool.length) // cyclic increment
       this.last = 0;
    return cli;
}

现在,您可以希望在1秒内执行所有查询回调:

代码语言:javascript
复制
var p = new Pool(16);
for (var i=0; i < 10; ++i)
{
    p.get().query('select sleep(1)', function() { console.log('ready'); } ); // server blocks for 1 second
}
票数 20
EN

Stack Overflow用户

发布于 2015-02-05 15:02:15

我相信同样的node-mysql包提供了连接池。看一看

代码语言:javascript
复制
var express   =    require("express");
var mysql     =    require('mysql');
var app       =    express();

var pool      =    mysql.createPool({
    connectionLimit : 100, //important
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'address_book',
    debug    :  false
});

function handle_database(req,res) {

    pool.getConnection(function(err,connection){
        if (err) {
          connection.release();
          res.json({"code" : 100, "status" : "Error in connection database"});
          return;
        }   

        console.log('connected as id ' + connection.threadId);

        connection.query("select * from user",function(err,rows){
            connection.release();
            if(!err) {
                res.json(rows);
            }           
        });

        connection.on('error', function(err) {      
              res.json({"code" : 100, "status" : "Error in connection database"});
              return;     
        });
  });
}

app.get("/",function(req,res){-
        handle_database(req,res);
});

app.listen(3000);

阅读完整的案例研究(带池和不带池):http://codeforgeek.com/2015/01/nodejs-mysql-tutorial/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6731214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档