简要代码如下: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進程