我需要在一个盒子上运行Node服务器来开发几个独立的项目。
在基于虚拟主机的前端路由中使用Nginx,运行单独工作的15 + node
个实例通常不是很大的问题。问题在于,只需要开始node
就可以多次使用内部库的开销来占用我的所有内存。
那么是否存在这样的解决方案,允许我在共享核心库的同时运行几个基本上独立的Node服务器?以下是我所考虑的内容:
require ()
将每个服务器放到同一个节点实例上 - 我无法想到如何杀死或重新加载这些服务器。有没有办法unrequire
并重新启动外部模块?通过允许共享其他库(例如Socket.IO),这种方法可能是理想的。无论如何,这可能是一个边缘情况,所以我并不感到惊讶,解决方案并不明显。
有谁知道实现这个的方法?
答案 0 :(得分:0)
现有的线程库会严重限制您对I / O的访问,并且您可以运行自己的CPU绑定Javascript代码,而不是提供数据。共享核心是certainly possible,但也有点痛苦。我认为你最后的选择是最可行的。您可以非常轻松地为节点组建虚拟化系统。
以下是一些独立的Express应用程序。
应用-one.js:强>
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app one.');
});
app.listen(3000);
应用-two.js:强>
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app two.');
});
app.listen(3001);
通过将listen
行替换为模块的赋值来更改它们:
应用酮virtual.js:强>
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app one.');
});
module.exports = app;
应用-两virtual.js:强>
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app two.');
});
module.exports = app;
然后编写一个主应用程序,该应用程序需要每个应用程序并根据传入的host
标头向它们委派请求:
应用-master.js:强>
var http = require('http');
var appOne = require('./app-one-virtual');
var appTwo = require('./app-two-virtual');
http.createServer(function (req, res) {
if (req.headers.host === 'one.example.com:3000') {
return appOne(req, res)
}
if (req.headers.host === 'two.example.com:3000') {
return appTwo(req, res)
}
res.writeHead(404)
res.end('Site not found.')
}).listen(3000);
现在只需node app-master.js
即可。根据需要重复多个服务器。