![](/img/trans.png)
[英]Issue with broadcast channel when using with nodejs worker_threads module
[英]NodeJS .fork() using threads
我需要在单个盒子上运行Node服务器来开发多个独立项目。
使用基于虚拟主机的前端路由Nginx时,运行15个以上的node
实例分别工作通常不是什么大问题。 问题是,刚开始的node
被很多次占用了我所有的RAM,而只是内部库的开销。
那么是否存在针对此问题的解决方案,允许我在共享核心库的同时运行几台很大程度上独立的Node服务器? 这是我考虑过的:
require ()
输入到同一Node实例上,我想不出如何杀死或重新加载这些服务器。 有没有办法unrequire
并重新启动外部模块? 通过允许共享其他库(例如Socket.IO),此方法可能是理想的。 无论如何,这可能是一个极端的情况,所以对于解决方案并不明显我并不感到惊讶。
有人知道实现此方法的方法吗?
现有的线程库非常严格地限制了对I / O的访问,旨在让您运行自己的CPU绑定Javascript代码,而不提供数据。 共享核心当然是可能的 ,但也有些痛苦。 我认为您最后的选择是最可行的。 您可以很容易地为节点组合一个虚拟化系统。
这是几个独立的Express应用程序。
app-one.js:
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app one.');
});
app.listen(3000);
app-two.js:
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app two.');
});
app.listen(3001);
通过用模块分配替换listen
线来更改它们:
app-one-virtual.js:
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app one.');
});
module.exports = app;
app-two-virtual.js:
var app = require('express')();
app.get('/', function (req, res) {
res.send('This is app two.');
});
module.exports = app;
然后编写一个需要每个应用程序的主应用程序,并根据传入的host
头将请求委托给他们:
app-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
。 重复任意多的服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.