我在另一个帖子中问同样的问题,但答案误解了我的问题,因此我再问一遍 我有两个脚本 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)的交易.令人惊讶的简单,我会说.我喜欢节点.