使用 Sailsjs 的连接池
Connection pooling with Sailsjs
因为 there is not documentation about how to create connection poolings with Sailsjs, I've being searching a little bit about it and I've found that sails-mysql adapter 中确实有任何池配置,但与测试相关:
{
host: process.env.WATERLINE_ADAPTER_TESTS_HOST || 'localhost',
// (...)
database: process.env.WATERLINE_ADAPTER_TESTS_DATABASE || 'sails_mysql',
pool: true,
connectionLimit: 10,
waitForConnections: true
}
所以我尝试将 pool: true
包含到我在 Sails 中的 connections.js
文件中:
someMysqlServer: {
adapter: 'sails-mysql',
host: '127.0.0.1',
user: 'root',
password: '',
pool: true,
database: 'mydatabase'
},
服务器仍在运行,我从数据库中恢复了数据,但我完全不确定我是否设置了连接抛出池服务。有什么方法可以检查这个功能吗?
谢谢。
一切尽在代码中
你可以看看sails-mysql(node modules)的代码,你的疑惑肯定能找到答案。
在 sails-mysql 模块中,主要的 js 是 node-modules/sails-mysql/lib/adapter.js
(根据 node-modules/sails-mysql/package.json
)。
所以在 adapter.js 文件中你可以看到..
/*--codes--*/
var _spawnConnection = require('./connections/spawn');
/*--codes--*/
defaults: {
pool: true,
connectionLimit: 5,
waitForConnections: true
},
/*--codes--*/
设置为默认使用连接限制为 5 的池。
现在转到那里的文件 node-modules/sails-mysql/lib/connections/spawn.js
你看到了这个片段。
/*--codes--*/
/*--codes--*/
if (connectionObject.connection.pool) {
connectionObject.connection.pool.getConnection(function (err, conn) {
afterwards(err, conn);
});
return;
}
// Use a new connection each time
var conn = mysql.createConnection(connectionObject.config);
conn.connect(function (err) {
afterwards(err, conn);
});
return;
/*--codes--*/
/*--codes--*/
这里检查适配器是否设置为使用池,如果是 pool:true
则从池中生成连接,否则使用单独的连接而不使用池...
现在开始怀疑....在你的 config/connections.js 中,如果你定义了一个像
这样的适配器
mysqlServerMaster: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root',
password: 'root',
pool: false,
database: 'payments_db'
},
那么你使用的是 mysql 而没有合并。
以及其他如果您使用此设置...
mysqlServerMaster: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root',
password: 'root',
pool: true,
connectionLimit: 10,
database: 'payments_db'
},
那么你有一个 mysql connectioLimit ===10 的连接池
一定。
我希望你现在明白了。
https://www.npmjs.com/package/sails-mysql
因为 there is not documentation about how to create connection poolings with Sailsjs, I've being searching a little bit about it and I've found that sails-mysql adapter 中确实有任何池配置,但与测试相关:
{
host: process.env.WATERLINE_ADAPTER_TESTS_HOST || 'localhost',
// (...)
database: process.env.WATERLINE_ADAPTER_TESTS_DATABASE || 'sails_mysql',
pool: true,
connectionLimit: 10,
waitForConnections: true
}
所以我尝试将 pool: true
包含到我在 Sails 中的 connections.js
文件中:
someMysqlServer: {
adapter: 'sails-mysql',
host: '127.0.0.1',
user: 'root',
password: '',
pool: true,
database: 'mydatabase'
},
服务器仍在运行,我从数据库中恢复了数据,但我完全不确定我是否设置了连接抛出池服务。有什么方法可以检查这个功能吗?
谢谢。
一切尽在代码中
你可以看看sails-mysql(node modules)的代码,你的疑惑肯定能找到答案。
在 sails-mysql 模块中,主要的 js 是 node-modules/sails-mysql/lib/adapter.js
(根据 node-modules/sails-mysql/package.json
)。
所以在 adapter.js 文件中你可以看到..
/*--codes--*/
var _spawnConnection = require('./connections/spawn');
/*--codes--*/
defaults: {
pool: true,
connectionLimit: 5,
waitForConnections: true
},
/*--codes--*/
设置为默认使用连接限制为 5 的池。
现在转到那里的文件 node-modules/sails-mysql/lib/connections/spawn.js
你看到了这个片段。
/*--codes--*/
/*--codes--*/
if (connectionObject.connection.pool) {
connectionObject.connection.pool.getConnection(function (err, conn) {
afterwards(err, conn);
});
return;
}
// Use a new connection each time
var conn = mysql.createConnection(connectionObject.config);
conn.connect(function (err) {
afterwards(err, conn);
});
return;
/*--codes--*/
/*--codes--*/
这里检查适配器是否设置为使用池,如果是 pool:true
则从池中生成连接,否则使用单独的连接而不使用池...
现在开始怀疑....在你的 config/connections.js 中,如果你定义了一个像
这样的适配器mysqlServerMaster: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root',
password: 'root',
pool: false,
database: 'payments_db'
},
那么你使用的是 mysql 而没有合并。
以及其他如果您使用此设置...
mysqlServerMaster: {
adapter: 'sails-mysql',
host: 'localhost',
user: 'root',
password: 'root',
pool: true,
connectionLimit: 10,
database: 'payments_db'
},
那么你有一个 mysql connectioLimit ===10 的连接池 一定。 我希望你现在明白了。 https://www.npmjs.com/package/sails-mysql