2022. augusztus 24., szerda

A Node.js alapjai

A Node.js-t méretezhető hálózati alkalmazások létrehozására tervezték,  aszinkron eseményvezérelt JavaScript-futási környezetként. Ez ellentétben áll a manapság elterjedtebb párhuzamossági modellel, amelyben operációs rendszer szálakat alkalmaznak. A szál alapú hálózatkezelés viszonylag nem hatékony és nagyon nehezen használható. Ezenkívül a Node.js felhasználói mentesek attól, hogy a folyamat holtpontra zárják, mivel nincsenek zárolások. A Node.js-ben szinte egyetlen funkció sem hajt végre I/O-t közvetlenül, így a folyamat soha nem blokkol, kivéve, ha az I/O-t a Node.js szabványos könyvtárának szinkron módszereivel hajtják végre. Mivel semmi sem blokkol, a méretezhető rendszereket nagyon ésszerű Node.js-ben fejleszteni. A Node.js egy kicsit tovább viszi az eseménymodellt. Az eseményhurkot futásidejű konstrukcióként jeleníti meg , nem pedig könyvtárként. Más rendszerekben mindig van egy blokkoló hívás az eseményhurok elindításához. A viselkedést általában a szkript elején visszahívások határozzák meg, a végén pedig egy blokkoló hívás, például a kiszolgáló elindítása történik EventMachine::run(). A Node.js-ben nincs ilyen start-the-event-loop hívás. A Node.js egyszerűen belép az eseményhurokba a bemeneti parancsfájl végrehajtása után. A Node.js kilép az eseményhurokból, ha nincs több végrehajtandó visszahívás. Ez a viselkedés olyan, mint a böngésző JavaScript – az eseményhurok el van rejtve a felhasználó elől.
A HTTP első osztályú állampolgár a Node.js-ben, amelyet a streamelés és az alacsony késleltetés figyelembevételével terveztek. Ez teszi a Node.js-t alkalmassá webkönyvtár vagy keretrendszer alapításához.
A Node.js szálak nélküli tervezése nem jelenti azt, hogy nem tudja kihasználni a környezet több magját. Az API segítségével gyermekfolyamatokat lehet létrehozni child_process.fork(), és úgy tervezték, hogy könnyen kommunikálhassanak velük. Ugyanerre az interfészre épül a clustermodul, amely lehetővé teszi a socketek megosztását a folyamatok között, hogy lehetővé tegye a terheléselosztást a magokon.
 A következő „hello world” példában sok kapcsolat kezelhető egyidejűleg. Minden csatlakozáskor a visszahívás elindul, de ha nincs mit tenni, a Node.js aludni fog.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

Nincsenek megjegyzések:

Megjegyzés küldése