我在另一个帖子中问同样的问题,但答案误解了我的问题,因此我再问一遍 我有两个脚本 s1.js, s2.js 都使用快速框架并听取某些端口. 我打电话 node s1.js //listens to port 8080node s2.js //listens t
我有两个脚本
s1.js, s2.js
都使用快速框架并听取某些端口.
我打电话
node s1.js //listens to port 8080 node s2.js //listens to port 8081
要启动这两个脚本,一个侦听端口8080,另一个侦听端口8081.
是否可以使nodejs脚本侦听相同的端口8080?
我打电话时如何分开这两个脚本
www.abc.com:8080
您的评论欢迎
更新的问题
我尝试代码app.js
var express = require("express");
var app = express();
app.use('/app1', require( './app1/index.js').app);
app.use('/app2', require( './app2/index.js').app);
app.listen(8081);
在路径./app1/index.js
var express = require("express");
var app = express();
console.log("app1");
app.listen(8081);
在路径./app2/index.js
var express = require("express");
var app = express();
console.log("app2");
app.listen(8081);
然后我打电话给
node app
控制台报告错误:
app1
/Users/myname/node_modules/express/lib/application.js:111
if (fn.handle && fn.set) app = fn;
^
TypeError: Cannot read property 'handle' of undefined
at Function.app.use (/Users/zhengwang/node_modules/express/lib/application.js:111:9)
at Object.<anonymous> (/Users/zhengwang/multi.js:27:7)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:901:3
群集执行此操作,Express.vhost也是如此.实际上你可以使用两者并且只使用1个端口.
// server.js
var cluster = require('cluster');
var express = require('express');
var app = express ();
var cpus = require('os').cpus().length - 1;
if(cluster.isMaster) {
for(var i=0;i<cpus;i++) {
cluster.fork ();
}
}
else {
app
.use( express.vhost('www.site1.com'), require('./site1.js').app ) )
.use( express.vhost('www.site2.com'), require('./site2.js').app ) )
.listen(8080);
}
在site1.js,site2.js中,你可以像编写任何其他节点应用程序一样编写它们,除了两件小事.导出你的应用程序(var app = exports.app = express()),并且不要在这两个文件中监听(app.listen(8080)).您可以看到server.js已经为您监听,并且还需要从它们输出两个“app”.现在,同一服务器上的所有站点都可以运行在同一个端口上,也可以运行在服务器所拥有的每个CPU上.我相信你的服务器本身也需要正确设置,对于多个虚拟主机,但这超出了提出的问题.
群集处理向运行的其中一个节点应用程序(server.js)发送请求,然后根据使用的URL为请求表达使用正确应用程序(site1.js,site2.js)的交易.令人惊讶的简单,我会说.我喜欢节点.
