关于对《深刻浅出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电脑

相关文章
相关标签/搜索