简要代码如下:if(cluster.isMaster){
cluster.fork(); cluster.fork();
}else{
http.createServer(function(){ ... }).bind(8080);
}想问一下,为什么server的创建要写在else里面?那意思不就是 在子进程中创建server,运行了两次,就是创建了2个server?而且都是绑定的同样的端口号?求指点。
认证高级PHP讲师
我是这么理解的:文件开始执行的时候cluster.isMaster 是 true然后进入 true 分支进行fork每fork一次 新建一个线程 这个线程会从头开始执行文件此时cluster.isMaster 是 false进入 false 分支 执行创建 server 至于为什么监听的是同一个端口 实际上只有主线程监听这个端口cluster 主线程会实现分发器 将请求分配给 这个端口上的其他线程
由master进程创建并监听端口,当请求到达服务器master进程accept,并分发给worker进程
我是这么理解的:
文件开始执行的时候
cluster.isMaster 是 true
然后进入 true 分支进行fork
每fork一次 新建一个线程 这个线程会从头开始执行文件
此时cluster.isMaster 是 false
进入 false 分支
执行创建 server
至于为什么监听的是同一个端口
实际上只有主线程监听这个端口
cluster 主线程会实现分发器
将请求分配给 这个端口上的其他线程
由master进程创建并监听端口,当请求到达服务器master进程accept,并分发给worker进程