主进程代码以下所示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电脑