javascript - Nodejs mempunyai beberapa soalan tentang menghantar pemegang antara proses
我想大声告诉你
我想大声告诉你 2017-05-16 13:45:26
0
1
629

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;

Fail proses ibu bapa:

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

我想大声告诉你
我想大声告诉你

membalas semua(1)
阿神

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan