我试图弄清楚如何使用NodeJS在Heroku(以及可能在任何地方)上正确使用集群。
我的设置非常简单-Express API,Postres数据库(使用sequelize
)和一些将在数据库上定期运行的作业。
我已经阅读了on Heroku's website上的指南,但是仍然不确定与数据库的连接。这是我的代码:
const cluster = require('cluster');
const throng = require('throng');
const Jobs = require('./jobs');
const DB = require('./db');
const app = require('./config/express');
const WORKERS = process.env.WEB_CONCURRENCY || 1;
const port = process.env.PORT;
const env = process.env.ENV;
async function start(id) {
// Setup an express server
app.listen(port, () => {
const message = `Worker ${id}: Server started on port ${port} (${env})`;
console.log(message);
});
}
async function setup() {
if (cluster.isMaster) {
// I guess I just want one instance of the scheduler that will run
// some code affective the database e.g. once a day
await Jobs.setup();
}
// Connect to the database – should I do in inside the `start` method?
await DB.setup();
// Create multiple instances of the API using `throng`:
const instance = throng({
workers: WORKERS,
lifetime: Infinity,
}, start);
return instance;
}
const instance = setup();
module.exports = instance;
我有几个问题:
1.快速侦听器设置正确吗? (我几乎可以肯定,因为在Heroku的指南中可以找到类似的实现方式)
2.我是否也应该在DB.setup
中包括start
方法?
3. Jobs.setup
方法放置正确吗?我希望这段代码运行例如每天一次,它将影响数据库(例如进行一些统计)
非常感谢您的帮助!