Rumah > Soal Jawab > teks badan
Pertama lihat setiap aplikasi dan cetuskan perkhidmatan http melalui perkhidmatan bersih
const http = require('http');
const net = require('net');
let netServer = net.createServer();
let httpServer = http.createServer((req, res)=>{
res.end('ok');
})
netServer.listen(3000,function(){
console.log("222222");
//netServer.close();
})
netServer.on('connection',(socket)=>{
httpServer.emit('connection',socket);
})
Ringkasnya, ia adalah untuk memulakan dua perkhidmatan, satu perkhidmatan bersih dan satu perkhidmatan http perkhidmatan;
Terdapat baris komen di dalamnya, Nota, perkhidmatan ditutup
Tetapi lihat pada aplikasi lain, yang melibatkan pemindahan sub-proses;
var cp = require('child_process');
var net = require('net');
var child1 = cp.fork('./c.js');
var child2 = cp.fork('./c.js');
var netServer = net.createServer();
netServer.listen(3000,function(){
child1.send('server', netServer);
child2.send('server', netServer);
console.log("222222");
netServer.close();
})
Fail subproses:
const http = require('http');
let httpServer = http.createServer((req, res)=>{
// res.writeHead(200,{'Content-Type':'text/plain' + '\n'});
res.end('ok');
})
process.on('message', function(m, tcp){
console.log(m);
tcp.on('connection', function(socket){
httpServer.emit('connection',socket);
})
})
Seperti yang anda lihat, terdapat juga baris komen dalam fail proses induk, tetapi selepas mengalih keluar ulasan di sini, perkhidmatan boleh berfungsi seperti biasa. Apakah sebabnya? Perkhidmatan bersih proses induk telah ditutup, dan ia tidak lagi mendengar port 3000. Saya tidak faham
Pada peringkat kod, saya faham bahawa proses ibu bapa telah tamat, tetapi proses anak belum tamat. tetapi bagaimana aliran permintaan berjalan, atau ini Bagaimana kod berjalan agak mengelirukan Node menerangkannya dalam istilah yang mudah
阿神2017-05-16 13:47:26
Mengoelnya dan menemui soalan yang sama pada stackoverflow
Kunci hendaklah berada dalam bahagian ini handleConversion
Apabila terdapat parameter pemegang semasa menghantar, handleConversion[type] akan dipanggil
Anda boleh melihat bahawa apabila menaip: "net.Server", apa yang dihantar ialah pelayan._handle
dan bila menerima adalah Begitu
got: function(message, handle, emit) {
var self = this;
var server = new net.Server();
server.listen(handle, function() {
emit(server);
});
}
Maksudnya, proses induk menghantar pelayan._handle
, dan proses anak menggunakan pemegang ini untuk membina semula pelayan
Jadi sebenarnya, pelayan dalam proses anak adalah berbeza daripada pelayan dalam proses induk. Penutupan proses ibu bapa adalah semula jadi tidak akan menjejaskan proses anak
Soalan tentang stackoverflow boleh didapati di sini