![](/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.