Hoe onderliggende processen te maken in Node.js

Hoe Onderliggende Processen Te Maken In Node Js



Tijdens het programmeren in “ knooppunt.js ”, één enkel proces is nooit efficiënt om de toenemende werkdruk van de applicatie het hoofd te bieden. Daarom kunnen er bepaalde situaties zijn waarin de ontwikkelaar nieuwe processen moet creëren, met langetermijntaken moet werken en interactie met het besturingssysteem mogelijk moet maken. Dit kan worden bereikt door onderliggende processen te maken die gebruik maken van meerdere processen, waardoor een Node-applicatie wordt geschaald.

In dit artikel wordt de onderstaande inhoud uitgelegd:







Wat is een kindproces?

Een kindproces komt overeen met een proces dat is gecreëerd via een ander proces, d.w.z. het ouderproces. Node.js biedt de “ kind_proces ”-module die zorgt voor een effectieve communicatie tussen de kindprocessen. Deze module helpt ook bij het oproepen van de functies van het besturingssysteem door een systeemopdracht binnen een onderliggend proces uit te voeren.



Hoe onderliggende processen maken in Node.js?

Het kind verwerkt in “ knooppunt.js ” kan worden gemaakt via de onderstaande benaderingen:



  • paaien() Methode.
  • vork() Methode.
  • exec() Methode.
  • execBestand() Methode.

Benadering 1: Onderliggende processen maken in node.js via de “spawn()”-methode

De ' paaien() ”-methode genereert een cmdlet in een nieuw proces met behulp van de opgegeven cmdlet en de opdrachtregelargumenten. De ChildProcess-instantie past/implementeert de EventEmitter-API toe waarmee handlers voor gebeurtenissen op onderliggende objecten kunnen worden geregistreerd. Deze gebeurtenissen omvatten afsluiten, verbinding verbreken, fout, bericht en sluiten.





Syntaxis

kind_proces. paaien ( cmdlet [ , arg ] [ , opties ] )

In deze syntaxis:



  • cmdlet: Er is een tekenreeks nodig die de cmdlet is om uit te voeren.
  • argumenten: Het verwijst naar de lijst met stringargumenten. De standaardwaarde is een null-array.
  • De ' opties ' kan een 'shell' zijn die een Booleaanse waarde aanneemt. Het is zo dat als het “ WAAR ”, wordt de cmdlet uitgevoerd vanuit de shell. De standaardwaarde is “ vals 'wat geen schil impliceert. Standaard, ' paaien() ” maakt/genereert geen shell om de cmdlet uit te voeren. Daarom is het van cruciaal belang om deze als een “optie” door te geven bij toegang tot het onderliggende proces.

Winstwaarde: Met deze methode wordt een ChildProcess-object opgehaald.

Hieronder volgt een demonstratie van het maken van een kindproces:

const { paaien } = vereisen ( 'kind_proces' ) ;

const kind = paaien ( 'Jij' , [ 'D: \S ETUPS' ] , { schelp : WAAR } ) ;

kind. stoer . op ( 'gegevens' , ( gegevens ) => {

troosten. loggen ( `stdout : $ { gegevens } ` ) ;

} ) ;

kind. stderr . op ( 'gegevens' , ( gegevens ) => {

troosten. fout ( `stderr : $ { gegevens } ` ) ;

} ) ;

kind. op ( 'dichtbij' , ( code ) => {

troosten. loggen ( `kindproces afgesloten met code $ { code } ` ) ;

} ) ;

In dit codeblok:

  • Vermeld allereerst de “ kind_proces ”-module voor het maken van een onderliggend proces.
  • Spawn daarna een onderliggend proces voor het weergeven van de inhoud in het opgegeven pad, d.w.z. “ D:\SETUPS ”.
  • Als laatste wordt de “ dichtbij ”-gebeurtenis wordt aangeroepen wanneer het gehele onderliggende proces wordt afgesloten en het afsluitbericht op de console wordt weergegeven.

Uitvoer

Voer hier de volgende cmdlet uit om de code uit te voeren en de inhoud in het doelpad weer te geven:

knooppunt temp. js

Benadering 2: Onderliggende processen maken in node.js met behulp van de “fork()”-methode

Deze methode is gekoppeld aan de “ paaien() '-methode waarbij de communicatie tussen het kind en de ouderprocessen kan worden uitgevoerd via de' versturen() methode.

De ' vork() ”-methode scheidt de complexe rekentaken van de gebeurtenislus (main). Deze methode kan worden gebruikt om toegang te krijgen tot meerdere onderliggende processen, maar kan de algehele prestaties beïnvloeden, omdat elk proces zijn eigen geheugen heeft.

Syntaxis

kind_proces. vork ( mdpad [ , arg ] [ , opties ] )

Volgens deze syntaxis:

  • mdpad ” neemt een tekenreeks die de module vertegenwoordigt die in het kind moet worden uitgevoerd.
  • arg ” verwijst naar een lijst met stringargumenten.
  • opties ” kan “execPath”, “env”, “CWD”, “detached” en “execArgv” zijn.

Winstwaarde: Met deze methode wordt een ChildProcess-instantie opgehaald.

Code(Ouderproces)

Ga nu door het onderstaande codeblok dat de communicatie tussen de ouder- en kindprocessen mogelijk maakt met behulp van de “ versturen() methode:

const cp = vereisen ( 'kind_proces' ) ;

laat kind = cp. vork ( __mapnaam + '/fork2.js' ) ;

kind. op ( 'bericht' , functie ( X ) {

troosten. loggen ( 'Ouderproces kreeg:' , X ) ;

} ) ;

kind. versturen ( { Hallo : 'van ouderproces' } ) ;

kind. op ( 'dichtbij' , ( code ) => {

troosten. loggen ( `kindproces afgesloten met code $ { code } ` ) ;

} ) ;

In deze code:

  • Neem op dezelfde manier de “ kind_proces ”-module voor het maken van een onderliggend proces.
  • Geef nu het pad van het onderliggende proces op via de “ vork() methode.
  • Geef ten slotte het bericht weer dat het bovenliggende proces vertegenwoordigt via de “ versturen() ”-methode en geef de eventuele fout(en) weer.

Code (kindproces)

Het volgende codebestand, d.w.z. “ vork2.js ” vertegenwoordigt het onderliggende proces dat ook het bericht verzendt met behulp van de “ versturen() ”methode, als volgt:

proces. op ( 'bericht' , functie ( M ) {

troosten. loggen ( 'Kinderproces kreeg:' , M ) ;

} ) ;

proces. versturen ( { Hallo : 'van kindproces' } ) ;

Uitvoer

Voer nu de onderstaande cmdlet uit om de code uit te voeren:

knooppunt vorkkind. js

Uit deze output wordt bevestigd dat de ouder-kind-procescommunicatie op de juiste manier wordt uitgevoerd.

Benadering 3: Onderliggende processen maken in node.js met behulp van de “exec()”-methode

De ' exec() ”-methode maakt eerst een shell en voert vervolgens de cmdlet uit. Deze methode wordt gebruikt om het totale aantal mappen op te halen.

Syntaxis

kind_proces. uitvoerend ( cmdlet [ , opties ] [ , Bel terug ] )

In de gegeven syntaxis:

  • cmdlet ” neemt een tekenreeks die de opdracht vertegenwoordigt die moet worden uitgevoerd met door spaties gescheiden argumenten.
  • De ' opties ” omvatten “cwd”, “codering”, “shell” enz.
  • De ' Bel terug De functie wordt aangeroepen wanneer het proces/de bewerking eindigt.

Winstwaarde

Met deze methode wordt een ChildProcess-instantie opgehaald.

Ga nu verder met de code die het aantal mappen vermeldt:

const { uitvoerend } = vereisen ( 'kind_proces' ) ;
uitvoerend ( 'richt | zoek /c /v ''' , ( fout, stdout, stderr ) => {
als ( fout ) {
troosten. fout ( 'exec-fout : $ { fout } ` ) ;
opbrengst ;
}
troosten. loggen ( `stdout : Nummer van Directories -> $ { stoer } ` ) ;
als ( stderr != '' )
troosten. fout ( `stderr : $ { stderr } ` ) ;
} ) ;

Voeg in dit codefragment de tekst ' kind_proces ” module om onderliggende processen te creëren/maken. Los daarna de uitzonderingen/fouten op en geef het totale aantal mappen in de huidige werkmap weer.

Uitvoer

Voer de volgende code uit om de code uit te voeren:

node execchild. js

In deze uitvoer kan worden gesuggereerd dat het totale aantal mappen in de huidige werkmap wordt weergegeven.

Benadering 4: Onderliggende processen maken in node.js met behulp van de execFile()-methode

In de ' execBestand() ”-methode wordt het uitvoerbare doelbestand rechtstreeks voortgebracht in de vorm van een nieuw proces, daarom is het efficiënter dan de “ exec() methode. Deze methode brengt de gecreëerde “ execchild.js ”-bestand in de vorm van een nieuw proces.

Syntaxis

kind_proces. execBestand ( bestandsnaam [ , arg ] [ , opties ] [ , Bel terug ] )

In de gegeven syntaxis:

  • bestandsnaam ” heeft een tekenreeks nodig die de naam of het pad van het uit te voeren bestand vertegenwoordigt.
  • arg ” komt overeen met de lijst met stringargumenten.
  • De ' opties ” omvatten “cwd”, “codering”, “shell” enz.
  • De ' Bel terug De functie wordt aangeroepen wanneer het proces eindigt. De functieargumenten kunnen error, stdout, etc. zijn.

Winstwaarde

Met deze methode wordt ook een ChildProcess-instantie opgehaald.

Beschouw nu de volgende code die het uitvoerbare doelbestand voortbrengt als een nieuw proces:

const { execBestand } = vereisen ( 'kind_proces' ) ;
const X = execBestand ( 'knooppunt' , [ 'execchild.js' ] ,
( fout, stdout, stderr ) => {
als ( fout ) {
gooien fout ;
}
troosten. loggen ( stoer ) ;
} ) ;

Voer op basis van deze coderegels de volgende stappen uit:

  • Herhaal de besproken procedure voor het opnemen van de “ kind_proces ”module.
  • Pas in de volgende stap de “ execBestand() ”-methode die het opgegeven uitvoerbare bestand (besproken in de vorige benadering) voortbrengt als een nieuw proces, waardoor het totale aantal mappen in de werkmap wordt vermeld.

Uitvoer

Voer de onderstaande cmdlet uit om de code uit te voeren:

node exe-bestand. js

Met dit resultaat kan worden geverifieerd dat het opgegeven uitvoerbare bestand wordt gegenereerd en dat het aantal mappen wordt weergegeven.

Conclusie

De onderliggende processen in Node.js kunnen worden aangemaakt via de “ paaien() 'methode, de' vork() 'methode, de' exec() '-methode, of de' execBestand() methode. Deze benaderingen zorgen voor het voortbrengen van het onderliggende proces, maken de ouder-kind procescommunicatie mogelijk, of vermelden de mappen in de huidige werkmap (direct of via het voortbrengen van het uitvoerbare doelbestand).