集群的master节点能当http服务器吗?
发布于 12 年前 作者 zaobao 4672 次浏览 最后一次编辑是 8 年前

var cluster = require(‘cluster’); var http = require(‘http’); var numCPUs = require(‘os’).cpus().length;

if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); }

cluster.on(‘exit’, function(worker, code, signal) { console.log(‘worker ’ + worker.process.pid + ’ died’); }); } else { // Workers can share any TCP connection // In this case its a HTTP server http.createServer(function(req, res) { res.writeHead(200); res.end(“hello world\n”); }).listen(8000); }

<p>这是官方手册的例子,上面只有子线程用作服务器,如果master也createServer,会不会有影响?</p> <p>用手点击没有区别,现在还不会模拟高并发环境,有高手测试过吗?</p>

2 回复

<p>master还是不要做太多,master挂了就全挂了,不会迁到别的节点上。</p>

<p>这坑爹玩意儿也能叫集群,最多算个守护进程创建了一堆子进程,任务分配还得自己写,子进程挂了再创建一条也要自己写,连进程池的功能都没实现完全。好不容易有人写个进程框架,版本一更新,API变了原来框架就报错了,还要你自己再写一遍。</p>

不过完全没必要在一开始就使用线程池,在哪里阻塞再在哪里开个新线程,像数据库这种要频繁异步访问的就再开个线程池,这样更灵活。 我总想一开始就把任务分到不同线程,其实单进程也不错。

回到顶部