sündmusesilmus sõlme js-s

Sundmusesilmus Solme Js S



Node.js on võimas Javascripti raamistik, mis võimaldab kasutajatel käivitada Javascripti koodi serveris väljaspool brauserit. See on mitteblokeeriv sündmustepõhine käituskeskkond usaldusväärsete skaleeritavate veebirakenduste loomiseks. Sündmustsükkel on Node.js-i oluline osa, mis võimaldab teil teha ülesandeid, ootamata ühe lõpetamist enne teise käivitamist.

Kuigi Javascript on ühe lõimega keel, saab Node.js määrata operatsioonisüsteemile ülesandeid, võimaldades sellel korraga töödelda mitut ülesannet. Korraga tuleb täita mitu ülesannet, kuna operatsioonisüsteemi toimingud on mitme lõimega. Iga toiminguga seotud tagasihelistamine lisatakse sündmuste järjekorda ja Node.js ajastab selle käitamiseks, kui määratud ülesanne on lõpetatud.

Tõhusa ja usaldusväärse Node.js-koodi kirjutamiseks peab kasutajal olema hea arusaam sündmuste tsüklitest. See võib aidata ka jõudlusprobleemide tõhusal tõrkeotsingul. Sündmustsükkel failis Node.js säästab mälu ja võimaldab teil teha mitut asja korraga, ilma et peaksite ootama, kuni igaüks neist lõpeb. Mõiste 'asünkroonne' viitab mis tahes Javascripti funktsioonile, mis töötab taustal ilma sissetulevaid päringuid blokeerimata.







Enne otse sündmuste silmuste juurde hüppamist heitkem pilk Javascripti programmeerimiskeele erinevatele aspektidele.



Javascript asünkroonse programmeerimiskeelena

Vaatame asünkroonse programmeerimise kontseptsioone. Javascripti kasutatakse veebi-, mobiili- ja töölauarakendustes, kuid tuleb märkida, et Javascript on ühe lõimega sünkroonne arvutiprogrammeerimiskeel.



Mõiste mõistmiseks on toodud lihtne koodinäide.





funktsiooni meetod 1 ( ) {

konsool. logi ( 'Funktsioon 1' )

}

funktsiooni meetod2 ( ) {

konsool. logi ( 'Funktsioon 2' )

}

meetod1 ( )

meetod2 ( )

Selles koodis luuakse kaks lihtsat funktsiooni ja kõigepealt kutsutakse meetod1, nii et see logib kõigepealt meetod1 ja liigub seejärel järgmise juurde.

Väljund



Javascript sünkroonse programmeerimiskeelena

Javascript on sünkroonne programmeerimiskeel ja täidab iga rida samm-sammult, liikudes ülalt alla, korraga täidetakse ainult üks rida. Ülaltoodud näites logitakse terminalis kõigepealt meetod1 ja seejärel meetod2.

Javascript kui blokeerimiskeel

Sünkroonse keelena javascriptil on blokeerimisfunktsioon. Pole tähtis, kui kaua kulub käimasoleva protsessi lõpuleviimiseks, kuid uut protsessi ei alustata enne, kui eelmine on lõpule viidud. Eeldame, et ülaltoodud koodinäites on meetodis 1 palju koodiskripti, olenemata sellest, kui palju aega selleks kulub, kas 10 sekundit või minut, meetodit 2 ei käivitata enne, kui kogu meetodi 1 kood on käivitatud.

Kasutajad võisid seda sirvimise ajal kogeda. Kui veebirakendus käivitatakse brauseris taustaprogrammis, käivitatakse tohutu hulk koodi, nii et brauser näib mõneks ajaks külmutatud olevat, enne kui kasutajale kontrolljuurdepääsu tagastab. Seda käitumist nimetatakse blokeerimiseks. Brauser ei saa täiendavaid sissetulevaid päringuid vastu võtta enne, kui praegune päring on töödeldud.

Javascript on ühe lõimega keel

Programmi käivitamiseks JavaScriptis kasutatakse lõime funktsioone. Lõimed on võimelised täitma ainult ühte ülesannet korraga. Teised programmeerimiskeeled toetavad mitme lõimega töötamist ja võivad paralleelselt käivitada mitut ülesannet, javascript sisaldab ainult ühte lõime mis tahes koodiskripti täitmiseks.

Ootan Javascriptis

Nagu selles jaotises olevast nimest nähtub, peame edasiseks jätkamiseks ootama, kuni meie taotlus töödeldakse. Ootamine võib kesta mitu minutit, mille jooksul edasisi taotlusi ei rahuldata. Kui koodiskript jätkub ootamata, ilmneb koodis tõrge. Koodi asünkroonseks muutmiseks tuleb Javascriptis või täpsemalt Node.js-is rakendada mõnda funktsiooni.

Nüüd, kui oleme Javascripti erinevatest aspektidest aru saanud, mõistkem sünkroonsust ja asünkroonsust mõne lihtsa näite abil.

Koodi sünkroonne täitmine Javascriptis

Sünkroonne tähendab, et kood täidetakse järjestikku või lihtsamalt samm-sammult alustades ülalt ja liikudes rida-realt alla.

Allpool on toodud näide, mis aitab mõista:

// application.js

konsool. logi ( 'üks' )

konsool. logi ( 'Kaks' )

konsool. logi ( 'kolm' )

Selles koodis on kolm lauset console.log, millest igaüks prindib midagi. Esiteks saadetakse esimene lause, mis konsoolis “One” trükib, 1 ms (hinnanguline) kõnepinku, seejärel logitakse see terminali. Peale seda lükatakse teine ​​lause kõnepinku ja nüüd on aeg 2 ms, millele lisandub üks eelmisest ja siis logib konsooli “Kaks”. Lõpuks lükatakse viimane lause kõnepinku, praegu on selleks ajaks 3 ms ja see logib konsooli 'Kolm'.

Ülaltoodud koodi saab käivitada järgmise käsu käivitamisega:

sõlme rakendus. js

Väljund

Eespool on kirjeldatud toimimist üksikasjalikult ja seda arvesse võttes logitakse väljund konsooli silmapilguga:

Koodi asünkroonne täitmine Javascriptis

Nüüd refaktoreerime sama koodi, lisades tagasihelistamised ja muutes koodi asünkroonseks. Ülaltoodud koodi saab ümber kujundada järgmiselt:

// application.js
funktsioon printOne ( helista tagasi ) {
setTimeout ( funktsiooni ( ) {
konsool. logi ( 'Üks' ) ;
helista tagasi ( ) ;
} , 1000 ) ;
}
funktsioon printKaks ( helista tagasi ) {
setTimeout ( funktsiooni ( ) {
konsool. logi ( 'Kaks' ) ;
helista tagasi ( ) ;
} , 2000 ) ;
}
funktsioon printThree ( ) {
setTimeout ( funktsiooni ( ) {
konsool. logi ( 'Kolm' ) ;
} , 3000 ) ;
}
konsool. logi ( 'Programmi algus' ) ;
printOne ( funktsiooni ( ) {
printKaks ( funktsiooni ( ) {
printKolm ( ) ;
} ) ;
} ) ;
konsool. logi ( 'Programmi lõpp' ) ;

Selles ülaltoodud koodis:

  • Kolm funktsiooni on deklareeritud printima 'Üks', 'Kaks' ja 'Kolm', igal funktsioonil on tagasihelistamisparameeter, mis võimaldab koodi järjestikust täitmist.
  • Ajalõpp määratakse funktsiooni setTimeout abil ja teatud viivituse järel on printimiseks konsole.logi lause.
  • Prinditakse kaks teadet “Programmi algus” ja “Programmi lõpp”, mis näitavad programmi algust ja lõppu.
  • Programm alustab printimisega “Programmi algus”, mille järel käivitatakse funktsioon printOne 1-sekundilise viivitusega, seejärel funktsioon printTwo 2-sekundilise viivitusega ja lõpuks funktsioon printThree 3-sekundilise viivitusega viivitus.
  • Programm ei oota asünkroonse koodi täitmist funktsioonide setTimeouts sees, mis logib enne ühe, kahe ja kolme printimist avalduse 'Programmi lõpp'.

Väljund

Käivitage ülaltoodud kood, käivitades terminalis järgmise käsu:

sõlme rakendus. js

Nüüd kuvatakse terminali väljund asünkroonselt järgmiselt:

Nüüd, kui meil on täielik arusaam sünkroonsest ja asünkroonsest täitmisest, jätkame oma sündmusteahela kontseptsiooni Node.js-s kinnistamist.

Node.js: sündmusetsükli mehhanism

Nii sünkroonsete kui ka asünkroonsete ülesannete täitmist haldab Node.js-i sündmusesilmus. Täitmine käivitatakse kohe pärast Node.js projekti käivitamist ja see edastab keerukad ülesanded sujuvalt süsteemi. See tagab, et muud toimingud saavad põhilõime sujuvalt töötada.

Sündmustsükli visuaalne seletus failis Node.js

Sündmustsükkel on Node.js-is pidev ja poollõpmatu. Sündmustsükkel käivitatakse koodiskripti Node.js käivitamisel ning see vastutab asünkroonitud API-kõnede tegemise ja protsesside väljakutsumise eest. Tick() ja ajastamise taimerid jätkavad seejärel sündmusetsükli täitmist.

Teenuses Node.js töötlevad tagasihelistamist viis peamist järjekorra tüüpi:

  • 'Taimeri järjekord', mida tavaliselt tuntakse min-hunnikuna, vastutab 'setTimeout' ja 'setInterval' seotud tagasihelistuste haldamise eest.
  • Asünkroonsete toimingute, nagu moodulite 'fs' ja 'http' tagasihelistamist haldab 'I/O Queue'.
  • 'Kontrollijärjekord' sisaldab tagasihelistusi funktsiooni 'setImmediate' jaoks, mis on sõlmele ainulaadne.
  • 'Sulejärjekord' haldab tagasihelistusi, mis on seotud mis tahes asünkroonse ülesande sulgemissündmusega.
  • Lõpuks on mikroülesannete järjekorras kaks erinevat järjekorda:
    • Järjekord 'nextTick' sisaldab tagasihelistusi, mis on seotud funktsiooniga 'process.nextTick'.
    • Järjekord „Promise” juhib oma Promisega seotud tagasihelistusi.

Sündmustsükli funktsionaalsus failis Node.js

Sündmustsükkel toimib konkreetsete nõuete alusel, mis juhivad tagasihelistamise täitmisjärjekorda. Kasutaja sünkroonsele Javascripti koodile antakse prioriteet protsessi alguses, nii et sündmusetsükkel algab alles siis, kui kõnepinn on tühjendatud. Järgmine täitmisjada järgib struktureeritud mustrit:

Kõrgeim prioriteet antakse tagasihelistamistele mikroülesannete järjekorras, seejärel liigutakse järgmises Ticki järjekorras olevate ülesannete täitmiseks, millele järgneb Promise järjekorras olevad ülesanded. Seejärel käsitletakse taimeri järjekordade tagasikutsumise protsesse, misjärel külastatakse mikroülesannete järjekorda uuesti pärast iga taimeri tagasihelistamist. I/O-, kontrolli- ja sulgemisjärjekordade tagasikutsungid teostatakse seejärel sarnase mustriga mikroülesannete järjekorraga, mida külastatakse pärast iga faasi.

Silmus jätkab täitmist, kui töödeldavaid tagasihelistusi on rohkem. Kui koodiskript on lõppenud või tagasihelistusi pole enam töödelda, lõpeb sündmusetsükkel tõhusalt.

Nüüd, kui oleme sündmuste tsüklist sügavalt aru saanud, vaatame selle funktsioone.

Sündmustsükli funktsioonid failis Node.js

Peamised omadused on järgmised:

  • Sündmustsükkel on lõpmatu tsükkel ja jätkab ülesannete täitmist niipea, kui need on vastu võetud, ja lülitub puhkerežiimi, kui ülesandeid pole, kuid hakkab toimima kohe pärast ülesande vastuvõtmist.
  • Sündmusjärjekorras olevad ülesanded täidetakse ainult siis, kui virn on tühi, see tähendab, et aktiivset toimingut pole.
  • Sündmustsüklis saab kasutada tagasihelistusi ja lubadusi.
  • Kuna sündmusetsükkel järgib abstraktse andmetüübi järjekorra põhimõtet, täidab see esimese ülesande ja jätkab seejärel järgmisega.

Pärast sündmuste tsükli ning asünkroonsete ja sünkroonsete täideviimiste loogika põhjalikku mõistmist võib erinevate faaside mõistmine sündmuse tsükli mõisteid tugevdada.

Node.js Sündmustsükli faasid

Nagu eespool mainitud, on sündmuste tsükkel poollõpmatu. Sellel on palju faase, kuid mõnda faasi kasutatakse sisemiseks käsitsemiseks. Need faasid ei mõjuta koodi skripti.

Sündmustsükkel järgib Queue'i funktsionaalsust ja täidab ülesande põhimõttel esimene sisse ja esimene välja. Ajastatud taimereid haldab operatsioonisüsteem kuni nende aegumiseni. Seejärel lisatakse aegunud taimerid taimerite tagasihelistamise järjekorda.

Sündmustsükkel täidab taimeri järjekorras olevaid ülesandeid ükshaaval, kuni ülesandeid enam ei ole või see jõuab maksimaalse lubatud arvu ülesandeni. Allpool olevates osades selgitatakse sündmuste tsüklite põhifaase.

Taimeri faas

Teenuses Node.js on taimeriga API, mis saab ajastada tulevikus täidetavaid funktsioone. Pärast määratud aja möödumist käivitatakse taimeri tagasihelistamine niipea, kui neid saab ajastada; Siiski võib viivitus tekkida kas operatsioonisüsteemi lõpust või muude tagasikutsumise tõttu.

Taimeri API-l on kolm peamist funktsiooni:

  • setTimeout
  • määrama kohe
  • setInterval

Eespool nimetatud funktsioonid on sünkroonsed. Taimeri faasi sündmuste ahelas on ulatus piiratud funktsioonidega setTimeout ja setInterval. Kuigi kontrollifunktsioon käsitleb funktsiooni setImmediate.

Vaatleme teoreetilise osa kinnitamiseks lihtsat näidet:

// application.js

funktsioon viivitatudFunktsioon ( ) {

konsool. logi ( 'viivitatud funktsioon käivitatakse pärast ajalõpu' ) ;

}

konsool. logi ( 'Programmi algus' ) ;

setTimeout ( viivitatud funktsioon, 2000 ) ;

konsool. logi ( 'Programmi lõpp' ) ;

Selles koodis:

  • Programm käivitub, logides terminali avalduse “Programmi algus”.
  • Seejärel kutsutakse funktsioon delayedFunction välja 2 ms pikkuse taimeriga, koodiskript ei peatu ja jätkab viivituse käsitlemist taustal.
  • Avaldus „Programmi lõpp logitakse pärast esimest avaldust.
  • Pärast 2 ms viivitust logitakse terminali funktsiooni delayedFunction avaldus.

Väljund

Väljund kuvatakse järgmiselt:

On näha, et koodi ei peatata funktsiooni delayedFunction töötlemiseks; see liigub edasi ja pärast viivitust töödeldakse funktsiooni tagasihelistamist.

Ootel tagasihelistamised

Sündmustsükkel kontrollib küsitlusfaasis toimuvaid sündmusi, nagu failide lugemine, võrgutoimingud või sisend-/väljundülesanded. Oluline on teada, et rakenduses Node.js käsitletakse selles küsitlusfaasis ainult mõnda sündmustest. Kuid sündmusetsükli järgnevas iteratsioonis võidakse teatud sündmused edasi lükata ootelfaasi. See on võtmemõiste, mida tuleb meeles pidada keerukaid sündmustepõhiseid toiminguid hõlmava Node.js-koodi optimeerimisel ja tõrkeotsingul.

Oluline on mõista, et ootel tagasihelistamiste faasis lisab sündmuste ahel edasilükatud sündmused ootel tagasihelistamiste järjekorda ja teostab need. See faas käsitleb ka mõningaid süsteemi tekitatud TCP-sokli tõrkeid, näiteks teatud operatsioonisüsteemides ECONNREFUSED tõrkesündmusi.

Kontseptsiooni tugevdamiseks on toodud allpool näide:

// application.js
konst fs = nõuda ( 'fs' ) ;
funktsioon readFileAsync ( filePath, tagasihelistamine ) {
fs. loe faili ( './PromiseText.txt' , 'utf8' , funktsioon ( eksitus, andmed ) {
kui ( eks ) {
konsool. viga ( ` Viga faili lugemiseks : $ { eks. sõnum } ` ) ;
} muidu {
konsool. logi ( ` Fail sisu : $ { andmeid } ` ) ;
}
helista tagasi ( ) ;
} ) ;
}
konsool. logi ( 'Programmi algus' ) ;
loe FileAsync ( './PromiseText.txt' , funktsioon ( ) {
konsool. logi ( 'Faili lugemise tagasihelistamine teostatud' ) ;
} ) ;
konsool. logi ( 'Programmi lõpp' ) ;

Selles koodis:

  • Programm käivitatakse, logides terminali välja avaldus “Programmi algus”.
  • ReadFileAsync on määratletud asünkroonselt faili 'PromiseText.txt' sisu lugemiseks. See on parameetritega funktsioon, mis käivitab pärast faili lugemist tagasihelistamise funktsiooni.
  • Failide lugemise alustamiseks kutsutakse funktsioon readFileAsync.
  • Failide lugemise käigus programm ei peatu; selle asemel liigub see järgmise lause juurde ja logib selle terminali 'Programmi lõpp'.
  • Faili lugemise asünkroonset sündmust töötleb taustal sündmusesilmus.
  • Pärast faili asünkroonset lugemist ja sisu terminali logimist logib programm faili sisu terminali. Pärast seda logib see järgmise teate 'Fail loeti tagasihelistamiseks'.
  • Sündmustsükkel tegeleb järgmises etapis ootel olevate tagasihelistamistoimingutega.

Väljund

Ülaltoodud teostuse tulemus on:

Idle, valmistage ette Node.js-i etapp

Jõudeolekufaasi kasutatakse Node.js-i sisemiste funktsioonide käsitlemiseks, seega pole see standardfaas. See ei mõjuta koodi skripti. Jõudefaas on nagu sündmusetsükli vaheaeg, mille jooksul haldab madala prioriteediga ülesandeid taustal. Selle etapi mõistmiseks on lihtne näide:

konst { tühikäigul } = nõuda ( 'idle-gc' ) ;

tühikäigul. ignoreerida ( ) ;

Selles koodis kasutatakse moodulit “idle-gc”, mis võimaldab tühikäigu faasi ignoreerida. Seda kasutatakse olukordade lahendamiseks, kui sündmusetsükkel on hõivatud ja taustaülesandeid ei tehta. Faili idle.ignore kasutamist ei peeta optimaalseks, kuna see võib põhjustada jõudlusprobleeme.

Küsitlusetapp rakenduses Node.js

Node.js-i küsitluse faas toimib järgmiselt:

  • See haldab küsitlusjärjekorras olevaid sündmusi ja täidab neile vastavaid ülesandeid.
  • See otsustab, kui palju aega kulub protsessis I/O toimingute ootamisele ja kontrollimisele.

Kui sündmuse tsükkel siseneb taimeri puudumise tõttu küsitlusfaasi, täidetakse üks järgmistest ülesannetest:

  • Node.js-i sündmusetsükli küsitlusfaasis asetatakse ootel olevad I/O sündmused järjekorda ja seejärel täidetakse need järjestikuse protseduurina, järgides põhimõtet First In ja First Out, kuni järjekord tühjeneb. Tagasihelistamise ajal on töös ka nextTick ja microtasks järjekorrad. See tagab sujuvuse ning võimaldab sisend-väljundtoiminguid tõhusamalt ja usaldusväärsemalt käsitleda.
  • Kui järjekord on tühi ja skripti pole funktsiooni setImmediate() poolt ajastatud, siis sündmusetsükkel lõpeb ja see liigub järgmisse faasi (kontroll). Teisest küljest, kui skripti ajastamise on teinud funktsioon setImmediate(), võimaldab sündmusesilmus lisada tagasihelistamised järjekorda, mille see käivitab.

Seda illustreerib kõige paremini lihtne koodinäide:

setTimeout ( ( ) => {

konsool. logi ( 'Asünkroonimistoiming on lõpetatud' ) ;

} , 2000 ) ;

konsool. logi ( 'Alusta' ) ;

määrama kohe ( ( ) => {

konsool. logi ( 'setImmediate callback executed' ) ;

} ) ;

konsool. logi ( 'Lõpp' ) ;

Selles koodis:

  • Kaks teadet “Start” ja “End” näitavad programmi käivitamist ja lõpetamist.
  • Funktsioon setTimeout() määrab tagasihelistamisfunktsiooni 2 ms viivitusega ja logib terminali teate 'Asünkroniseerimisoperatsioon lõpetatud'.
  • Funktsioon setImmediate() logib terminali sõnumi 'setImmediate tagasihelistamine teostatud' pärast seda, kui Start-teade on terminali logitud.

Väljund

Väljund näitab sõnumeid vaid minutise tähelepanekuga, et asünkroonimistoimingu lõpetamine võtab aega ja see trükitakse pärast sõnumit 'Lõpeta':

Node.js kontrollfaas

Pärast küsitluse faasi täitmist käivitatakse tagasihelistamised kontrollifaasis. Kui koodiskript on ajastatud funktsiooni setImmediate() abil ja küsitlusfunktsioon on vaba, liigub sündmusesilmus jõude jäämise asemel otse kontrollfaasi. Funktsioon setImmediate() on ainulaadne taimer, mis töötab sündmusetsükli erinevates faasides.

Libuv API-t kasutatakse tagasihelistamiste kavandamiseks pärast küsitluse faasi täitmist. Koodi täitmise ajal siseneb sündmusesilmus küsitlusfaasi, milles ta ootab sissetulevaid ühenduse taotlusi. Teisel juhul, kui tagasihelistamine on planeeritud funktsiooni setImmediate() abil ja küsitlusfaas lõpetatakse ilma tegevuseta, liigub see ootamise asemel kontrollifaasi. Mõistmiseks kaaluge allolevat näidet:

// application.js

konsool. logi ( 'Alusta' ) ;

määrama kohe ( ( ) => {

konsool. logi ( 'Kohe tagasihelistamine' ) ;

} ) ;

konsool. logi ( 'Lõpp' ) ;

Selle koodiga logitakse terminali sisse kolm teadet. Seejärel saadab funktsioon setImmediate() lõpuks tagasihelistamise, et logida sõnum ' Kohene tagasihelistamine ” terminali.

Väljund

Ülaltoodud koodi väljund kuvatakse järgmises järjestuses:

Node.js sulgeb tagasihelistamised

Node.js kasutab seda sulgemisfaasi sündmuste sulgemiseks ja sündmusetsükli iteratsiooni lõpetamiseks tagasihelistamiste käivitamiseks. Pärast ühenduse sulgemist tegeleb sündmuseahel selle faasi sulgemissündmustega. Selles sündmusetsükli faasis genereeritakse ja töödeldakse „nextTick()” ja mikrotegureid sarnaselt teiste faasidega.

Funktsiooni process.exit kasutatakse sündmusetsükli lõpetamiseks igal hetkel. Sündmustsükkel eirab kõiki pooleliolevaid asünkroonseid toiminguid ja protsess Node.js lõpetatakse.

Lihtne näide, mida kaaluda, on:

// application.js
konst net = nõuda ( 'võrk' ) ;
konst server = net. looServer ( ( pistikupesa ) => {
pistikupesa. peal ( 'Sulge' , ( ) => {
konsool. logi ( 'Pistikupesa suletud' ) ;
} ) ;
pistikupesa. peal ( 'andmed' , ( andmeid ) => {
konsool. logi ( 'Saadud andmed:' , andmed. toString ( ) ) ;
} ) ;
} ) ;
server. peal ( 'Sulge' , ( ) => {
konsool. logi ( 'Server suletud' ) ;
} ) ;
konst sadamasse = 3000 ;
server. kuulake ( sadam, ( ) => {
konsool. logi ( `Server kuulab pordis $ { sadamasse } ` ) ;
} ) ;
setTimeout ( ( ) => {
konsool. logi ( 'Serveri sulgemine 10 sekundi pärast' ) ;
server. Sulge ( ) ;
protsessi. väljuda ( ) ;
} , 10 000 ) ;

Selles koodis:

  • const net = nõuda('net') ' impordib TCP-serveri haldamiseks vajaliku võrgumooduli ja ' const server = net.createServer((socket) => { ” loob uue TCP-serveri eksemplari.
  • socket.on('sulge', () => {… } ” kuulab kõigi pistikupesade „sulgemist”. Kui pistikupesa ühendus on suletud, logitakse terminali teade 'Socket Closed'.
  • socket.on('andmed', (andmed) => {} ” kontrollib kõikidest üksikutest pesadest sissetulevaid andmeid ja prindib need funktsiooni „.toString()” abil.
  • server.on('sulge', () => {…} ” kontrollib serveris endas sündmust 'sulgemine' ja serveriühenduse sulgemisel logib terminali teate 'Server suletud'.
  • server.listen(port, () => {…} ” kuulab pordi sissetulevaid ühendusi.
  • setTimeout(() => {…} ” määrab serveri sulgemiseks taimeri 10 ms.

Sellega on arutelu Node.js-i sündmusetsükli erinevate etappide üle lõpetatud. Enne järeldusele hüppamist arutame viimast asja, milleks on Node.js-i sündmusetsüklist väljumine.

Node.js-i sündmusetsüklist väljumine

Sündmustsükkel on täitmisfaasis seni, kuni kõigis sündmustetsükli faaside järjekordades on ülesandeid. Sündmustsükkel lõpeb pärast väljumisfaasi väljastamist ja väljumiskuulaja tagasihelistamine naaseb, kui järjekordades pole enam ülesandeid.

Selge viis sündmusetsükli lõpetamiseks on kasutada .exit-meetodit. Funktsiooni Node.js aktiivsed protsessid lõpevad kohe, kui funktsioon process.exit kutsutakse. Kõik kavandatud ja ootel sündmused tühistatakse:

protsessi. peal ( 'väljumine' , ( kood ) => {

konsool. logi ( `Väljumine väljumiskoodiga : $ { kood } ` ) ;

} ) ;

protsessi. väljuda ( 1 ) ;

Kasutajad saavad kuulata funktsiooni .exit. Tuleb märkida, et funktsioon „.exit” peab olema sünkroonne, kuna programm Node.js väljub niipea, kui see sündmust kuulab.

Sellega on arutelu sündmuste tsükli üle lõpetatud. Põhjalik artikkel, mis on hõlmanud kõiki sündmusetsükliga seotud mõisteid, etappe ja näiteid.

Järeldus

Enne sündmusetsükli mõistmist võib sünkroonsete ja asünkroonsete mõistete ülevaade aidata mõista koodivoogu sündmusetsüklis. Sünkroonne täitmine tähendab samm-sammulist täitmist, asünkroonne täitmine aga mõne sammu peatamist, ootamata nende lõpetamist. Artiklis käsitletakse sündmusetsükli toimimist koos kõigi faasidega koos sobivate näidetega.