cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Nodejs mempunyai beberapa soalan tentang menghantar pemegang antara proses

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

我想大声告诉你我想大声告诉你2748 hari yang lalu595

membalas semua(1)saya akan balas

  • 阿神

    阿神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

    balas
    0
  • Batalbalas