主進程代碼以下所示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電腦