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 ;
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.
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
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