Node.js进程集群内容如何理解,有哪些要点
Admin 2022-08-12 群英技术资讯 810 次浏览
这篇文章主要介绍“Node.js进程集群内容如何理解,有哪些要点”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node.js进程集群内容如何理解,有哪些要点”文章能帮助大家解决问题。Node.js是单线程处理,对于高并发的请求怎么样能增加吞吐量呢?为了提高服务器的利用率,能不能多核的来处理呢?于是就有了cluster模块。
cluster模块可以轻松实现运行在同一机器不同进程上的TCP或HTTP服务器集群。它们仍使用相同的底层套接字,从而在相同的IP地址和端口组合上处理请求。
下面是它的一些事件属性和方法。
事件:
fork:当新的工作进程已经被派生时发出。callback函数接收worker对象作为唯一的参数。function(Worker)
online:当新的进程发回一消息,表明它已经启动时发出。callback同上。
listening:当工作进程调用listen()开始监听端口时发出。callback:fucntion(Worker,address)
disconnect:当IPC通道被切断时发出。如服务器调用worker.disconnect()的时候。callback:function(Worker)
exit:在Worker对象已断开时发出。callback:function(Worker,code,signal)
setup:在setupMaster()被首次调用时发出。
属性和方法:
settings:包含exec(工作进程的javascript文件)、args(传递的参数数组)、silent(断开工作进程的IPC机制)属性值,用于建立集群
isMaster:判断当前进程是否是主进程
isWorker:判断当前进程是否是工作进程
setupMaster([settings]):启动主进程
disconnect([callback]):断开工作进程的IPC机制,并关闭句柄,当断开连接完成时回调
worker:引用在工作进程的当前Worker对象
workers:包含Worker对象,可以通过标识从主进程引用它们。cluster.workers[workerId]
当一个工作进程被派时,一个新的Worker对象同时在主进程和工作进程中创建。在工作进程中Worker对象用来表示当前的工作进程,并与正在发生的集群事件进行交互。在主进程中,Worker对象代表子工作进程,是主应用程序向他们发送信息,接收它们的状态变化的事件甚至杀掉他们。
它也是有一些事件属性方法。
事件:
message:在工作进程收到一个新信息时发出,回调函数把message作为唯一的参数值
disconnect:在IPC通道已对这个工作进程断开后发出
exit:Worker对象已经断开时发出
error:工作进程发生错误时发出
属性方法:
id:工作进程标识
Process:工作进程运行的ChildProcess对象
suicide:对这个工作进程调用kill()或disconnect()时被设置为true。可以使用此标志来确定是否要跳出尝试的循环,并退出
send(message,[sendHandle]):将消息发送到主进程
kill([signal]):通过断开IPC通道杀掉当前工作进程,然后退出,将suicide设置为true。
disconnect():工作进程调它时,关闭所有服务器,等待关闭事件,并断开IPC通道。当从主节点调时,发送一个内部消息给工作进程,使其断开本身,设置suicide为true。
上面的也都是理论,下面通过实现一个HTTP集群来实践一下。
1.主进程
var cluster = require('cluster');
var http = require('http');
if (cluster.isMaster) {
cluster.on('fork', function(worker) {
console.log("Worker " + worker.id + " created");
});
cluster.on('listening', function(worker, address) {
console.log("Worker " + worker.id +" is listening on " +
address.address + ":" + address.port);
});
cluster.on('exit', function(worker, code, signal) {
console.log("Worker " + worker.id +" Exited");
});
cluster.setupMaster({exec:'cluster_worker.js'});
var numCPUs = require('os').cpus().length;
for (var i = 0; i < numCPUs; i++) {
if (i>=4) break;
cluster.fork();
}
Object.keys(cluster.workers).forEach(function(id) {
cluster.workers[id].on('message', function(message){
console.log(message);
});
});
}
2.工作进程
var cluster = require('cluster');
var http = require('http');
if (cluster.isWorker) {
http.Server(function(req, res) {
res.writeHead(200);
res.end("Process " + process.pid + " says hello");
process.send("Process " + process.pid + " handled request");
}).listen(8080, function(){
console.log("Child Server Running on Process: " + process.pid);
});
}
3.HTTP客户端测试
var http = require('http');
var options = { port: '8080'};
function sendRequest(){
http.request(options, function(response){
var serverData = '';
response.on('data', function (chunk) {
serverData += chunk;
});
response.on('end', function () {
console.log(serverData);
});
}).end();
}
for (var i=0; i<5; i++){
console.log("Sending Request");
sendRequest();
}
首先是启动主进程,创建工作进程开始监听
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe cluster_server.js Worker 1 created Worker 2 created Worker 3 created Worker 4 created Child Server Running on Process: 6152 Worker 1 is listening on null:8080 Child Server Running on Process: 10340 Worker 2 is listening on null:8080 Child Server Running on Process: 11412 Worker 3 is listening on null:8080 Child Server Running on Process: 12120 Worker 4 is listening on null:8080
其次启动HTTP客户端测试
"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe cluster_client.js Sending Request Sending Request Sending Request Sending Request Sending Request Process 12120 says hello Process 11412 says hello Process 12120 says hello Process 10340 says hello Process 6152 says hello Process finished with exit code 0
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了计算属性和侦听器,文章以介绍计算属性、侦听器的相关资料展开详细内容,需要的朋友可以参考一下,希望对你有所帮助
本篇文章给大家带来了关于JavaScript中单线程和异步的相关知识,希望对大家有帮助。
前言在直播中,创建房间,获取房间,都需要服务器,因此需要搭建Web服务器Web服务器能处理HTTP请求的服务器都可以叫Web服务器Node.js介绍Node.js什么时候出现,2009年,Ryan Dahl(瑞恩·达尔)在GitHub上发布了最初版本的部分Node.
本篇文章给大家带来了关于JavaScript中函数和作用域的相关知识,函数就是封装了一段可被重复调用执行的代码块,可用性的代码范围就是这个名字的作用域,希望对大家有帮助。
这篇文章给大家分享的是HTML中创建vue组件的方法,下文的几种方法示例中,除了有创建vue组件的操作还有调用创建vue组件的操作,文中示例代码介绍的非常详细,感兴趣的朋友接下来一起跟随小编看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008