Palvelinpuolen JavaScript-alustan Node.js 17.0 julkaisu

Node.js 17.0, alusta verkkosovellusten ajamiseen JavaScriptillä, julkaistiin. Node.js 17.0 on tavallinen tukihaara, joka saa päivityksiä kesäkuuhun 2022 saakka. Lähipäivinä saadaan päätökseen Node.js 16 -haaran stabilointi, joka saa LTS-tilan ja jota tuetaan huhtikuuhun 2024 asti. Node.js 14.0:n aiemman LTS-haaran ylläpito kestää huhtikuuhun 2023 asti ja edellisvuoden LTS-haaran 12.0:n ylläpitoon huhtikuuhun 2022 asti.

Tärkeimmät parannukset:

  • V8-moottori on päivitetty versioon 9.5.
  • Promise asynchronous computing -rajapinnan käyttöön perustuvien perus-API:n varianttien käyttöönotto on jatkunut. Aiemmin tarjottujen Timers Promises- ja Streams Promises -sovellusliittymien lisäksi Node.js 17.0 esittelee Readline Promise API:n tietojen lukemiseen rivi riviltä readline-moduulin avulla. tuonti * readline-muodossa kohteesta 'node:readline/promises'; tuonti { stdin syötteenä, stdout lähtönä } prosessista; const rl = readline.createInterface({ input, output }); const vastaus = odota rl.question('Mitä mieltä olet Node.js:sta?'); console.log('Kiitos arvokkaasta palautteestasi: ${answer}'); rl.close();
  • Mukana toimitettu OpenSSL-kirjasto on päivitetty versioon 3.0 (käytetään quictls/openssl-haarukkaa, jossa on käytössä QUIC-protokollatuki).
  • Otettu käyttöön Node.js-version näyttämisen pinojäljissä, jotka tulostetaan vakavien virheiden sattuessa, jotka aiheuttavat sovelluksen sulkemisen.

Lisäksi voidaan mainita kahden haavoittuvuuden poistaminen Node.js:n nykyisistä haaroista (CVE-2021-22959, CVE-2021-22960), jotka mahdollistavat "HTTP Request Smuggling" (HRS) -hyökkäysten suorittamisen. antaa meille mahdollisuuden kiilautua muiden käyttäjien pyyntöjen sisältöön, jotka käsitellään samassa säikeessä käyttöliittymän ja taustajärjestelmän välillä (esimerkiksi haitallista JavaScript-koodia voidaan lisätä toisen käyttäjän istuntoon). Yksityiskohdat paljastuvat myöhemmin, mutta toistaiseksi tiedämme vain, että ongelmat johtuvat HTTP-otsikon nimen ja kaksoispisteen välisten välilyöntien virheellisestä käsittelystä sekä siirron palautus- ja rivinvaihtomerkkien erilaisesta käsittelystä lähetettäessä käytetyssä parametrilohkossa. pyynnön runko osissa "palastettu" tilassa "

Muistetaan, että Node.js-alustaa voidaan käyttää sekä web-sovellusten palvelinpuolen tukemiseen että tavallisten asiakas- ja palvelinverkkoohjelmien luomiseen. Node.js-sovellusten toiminnallisuuden laajentamiseksi on valmisteltu suuri kokoelma moduuleja, joista löydät moduuleja HTTP-, SMTP-, XMPP-, DNS-, FTP-, IMAP-, POP3-palvelimien ja -asiakkaiden, integrointimoduuleja. erilaisilla verkkokehyksillä, WebSocket- ja Ajax-käsittelijöillä, DBMS-liittimillä (MySQL, PostgreSQL, SQLite, MongoDB), mallikoneilla, CSS-moottoreilla, salausalgoritmien ja valtuutusjärjestelmien toteutuksilla (OAuth), XML-jäsentimillä.

Suuren rinnakkaisten pyyntöjen käsittelyn varmistamiseksi Node.js käyttää asynkronista koodin suoritusmallia, joka perustuu ei-estoiseen tapahtumien käsittelyyn ja takaisinsoittokäsittelijöiden määrittelyyn. Tuetut menetelmät yhteyksien multipleksointiin ovat epoll, kqueue, /dev/poll ja select. Yhteyden multipleksointiin käytetään libuv-kirjastoa, joka on lisäosa libeville Unix-järjestelmissä ja IOCP:lle Windowsissa. Libeio-kirjastoa käytetään säiepoolin luomiseen, ja c-ares on integroitu suorittamaan DNS-kyselyitä estotilassa. Kaikki tukoksia aiheuttavat järjestelmäkutsut suoritetaan säikeen alla ja sitten, kuten signaalinkäsittelijät, siirtävät työnsä tuloksen takaisin nimeämättömän putken (pipe) kautta. JavaScript-koodin suoritus tapahtuu Googlen kehittämän V8-moottorin avulla (lisäksi Microsoft kehittää Node.js-versiota Chakra-Core-moottorilla).

Pohjimmiltaan Node.js on samanlainen kuin Perl AnyEvent-, Ruby Event Machine-, Python Twisted -kehykset ja Tcl-tapahtumatoteutus, mutta Node.js:n tapahtumasilmukka on piilotettu kehittäjältä ja muistuttaa tapahtumien käsittelyä käynnissä olevassa verkkosovelluksessa. selaimessa. Kun kirjoitat sovelluksia node.js:lle, sinun on otettava huomioon esimerkiksi tapahtumapohjaisen ohjelmoinnin erityispiirteet sen sijaan, että tekisit "var result = db.query("select..");" Työn valmistumisen ja tulosten myöhemmän käsittelyn odottaessa Node.js käyttää asynkronisen suorituksen periaatetta, ts. koodi muunnetaan muotoon "db.query("select..", funktio (tulos) {tuloksen käsittely});", jossa ohjaus siirtyy välittömästi seuraavalle koodille ja kyselyn tulos käsitellään tietojen saapuessa.

Lähde: opennet.ru

Lisää kommentti