天天看点

Node.js进程管理之进程集群

一、cluster模块

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对象用来表示当前的工作进程,并与正在发生的集群事件进行交互。在主进程中,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.主进程

2.工作进程

3.http客户端测试

首先是启动主进程,创建工作进程开始监听

其次启动http客户端测试

下面容我文艺一下下附上最近很火也很喜欢一句话:生活不止眼前的苟且,还有诗和远方。

继续阅读