關於對《深刻淺出Node.js》的一點疑惑

書中內容P243

主進程代碼以下所示javascript

var child = require('child_process').fork('child.js');
// Open up the server object and send the handle 
var server = require('net').createServer(); 
server.on('connection', function (socket) {
	socket.end('handled by parent\n'); 
});
server.listen(1337, function () { 
	child.send('server', server);
});
複製代碼

子進程代碼以下所示:java

process.on('message', function (m, server) { 
    if (m === 'server') {
	    server.on('connection', function (socket) { 
	        socket.end('handled by child\n');
	    }); 
	}
});
複製代碼

先 node parent.js 啓動服務器,而後新開一個命令行窗口,用上curl工具,以下所示:node

$ curl "http://127.0.0.1:1337/" 
handled by parent
$ curl "http://127.0.0.1:1337/"
handled by child
$ curl "http://127.0.0.1:1337/" 
handled by child
$ curl "http://127.0.0.1:1337/" 
handled by parent
複製代碼

命令行中的響應結果也是很難以想象的,這裏子進程和父進程都有可能處理咱們客戶端發起 的請求。windows

試試將服務發送給多個子進程,以下所示: parent.jsbash

var cp = require('child_process'); 
var child1 = cp.fork('child.js'); 
var child2 = cp.fork('child.js');
// Open up the server object and send the handle 
var server = require('net').createServer(); 
server.on('connection', function (socket) {
	socket.end('handled by parent\n'); 
});
server.listen(1337, function () { 
	child1.send('server', server); 		
	child2.send('server', server);
});
複製代碼

而後在子進程中將進程ID打印出來,以下所示:child.js服務器

process.on('message', function (m, server) { 
	if (m === 'server') {
		server.on('connection', function (socket) {
			socket.end('handled by child, pid is ' + process.pid + '\n');
		}); 
	}
});
複製代碼

再用curl測試咱們的服務,以下所示:curl

$ curl "http://127.0.0.1:1337/" 
handled by child, pid is 24673 
$ curl "http://127.0.0.1:1337/" 
handled by parent
$ curl "http://127.0.0.1:1337/" 
handled by child, pid is 24672
複製代碼

測試的結果是每次出現的結果均可能不一樣,結果可能被父進程處理,也可能被不一樣的子進程 處理。socket

我的測試結果

對於上面兩段代碼:工具

第一段個人測試結果:始終被子進程處理了,handled by child測試

第二段個人測試結果:始終被最後一個fork出的子進程處理,pid始終惟一

同時我用 node parent.js 運行的進程,可是用 ps aux查看不到相關的進程信息,這是爲何呢?

對此表示很疑惑,求解答~ 我是windows電腦

相關文章
相關標籤/搜索