javascript - Nodejs a quelques questions sur l'envoi de handles entre processus
我想大声告诉你
我想大声告诉你 2017-05-16 13:45:26
0
1
630

Regardez d'abord chaque application et déclenchez le service http via le service net

 ;
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);
})

Pour faire simple, il s'agit d'initialiser deux services, un service net et un service http. Utilisez le service net pour surveiller le port. Une fois le client connecté, déclenchez l'événement de connexion du service http et transmettez le socket au http. service;
Il y a une ligne de commentaires. S'il est fermé, notez que le service est fermé
Mais regardez une autre application, qui implique le module de sous-processus et gère le transfert entre les processus ;

Fichier de processus parent :

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();
})

Fichier de sous-processus :

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);
    })
})

Comme vous pouvez le voir, il y a également une ligne de commentaires dans le fichier du processus parent, mais après avoir supprimé les commentaires ici, le service peut fonctionner normalement. Quelle en est la raison ?

Le service net du processus parent a été fermé, et il n'écoute plus le port 3000. Je ne comprends pas.
Au niveau du code, je comprends que le processus parent est terminé, mais le processus enfant n'est pas terminé, mais comment s'exécute le flux de requêtes, ou comment s'exécute le code ? Mes pensées sont un peu confuses. Node l'explique en termes simples. C'est vraiment difficile à lire.

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

répondre à tous(1)
阿神

Je l'ai recherché sur Google et j'ai trouvé une question similaire sur stackoverflow

La clé doit être dans cette section handleConversion
Lorsqu'il y a un paramètre handle lors de l'envoi, handleConversion[type] sera appelé
Vous pouvez voir que lorsque vous tapez : "net.Server", ce qui est envoyé est server._handle
et quand recevoir est tel

got: function(message, handle, emit) {
      var self = this;

      var server = new net.Server();
      server.listen(handle, function() {
        emit(server);
      });
}

C'est-à-dire que le processus parent envoie server._handle
, et le processus enfant utilise ce handle pour reconstruire un serveur
Donc, en fait, le serveur du processus enfant est différent de celui du processus parent. la fermeture du processus parent est naturelle. N'affectera pas les processus enfants

Les questions sur le stackoverflow peuvent être trouvées ici

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal