UP WEB
2. Ecosystème NodeJS
Année universitaire
2024-2025
Plan
1. Traitement Asynchrone
2. Modèle I/O non-bloquant (Non-blocking I/O model)
3. Modèle guidé par les événements (Event-driven Model)
4. Call Stack et Event loop
5. Création de serveurs en Node JS
2
1. Traitement Asynchrone
Exemple visualisé : [Link]
4
1. Traitement Asynchrone
▪ setTimeout() est la fonction la plus utilisé lorsqu’on
cherche à exécuter du code asynchrone sans bloquer les
autres fonctions en cours d’exécution.
▪ Cette fonction accepte 2 paramètres
• La fonction à exécuter de manière asynchrone (qui sera
ajoutée à la file d'attente de l'event loop) ;
• Le délai, avant d’exécuter la fonction (en millisecondes).
5
1. Traitement Asynchrone
▪ Il existe d'autres méthodes un peu moins répandues par rapport à la
fonction setTimeout().
▪ setImmediate: Prend un seul paramètre (la fonction à exécuter) et
permet d’exécuter ce paramètre en mode synchrone.
▪ setInterval : elle fonctionne exactement comme setTimeout, elle
exécute la fonction passé en paramètre en boucle pour une période.
Pour arrêter l'exécution en boucle il suffit de passer le retour de cette
fonction à la fonction « clearInterval »
▪ clearInterval: Permet d'arrêter l’exécution de la fonction setInterval.
▪ clearTimeout: Permet d’annuler l'exécution asynchrone de la fonction
setTimeout().
6
2. Non-blocking I/O model
● Node JS est Monothread, mais il utilise un modèle Non bloquant
7
2. Non-blocking I/O model
[Link] :Single Thread
•Apache est multithread • [Link] est mono-thread
8
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
9
2. Non-blocking I/O model
Simulation: Handling Requests
Server
Mode Synchrone
DB
Client 1
Client 2
10
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB
Server
Client 1
Client 2
11
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB R1
Server
Client 1
Client 2
12
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Server
Mode Synchrone
DB
Client 1
Client 2
13
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB
Client 1
Server
Client 2
14
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB
Server
Client 1
Client 2
15
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB R2
Server
Client 1
Client 2
16
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Synchrone
DB
Client 1
Server
Client 2
17
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
18
2. Non-blocking I/O model
Simulation: Handling Requests
Server
Mode Asynchrone
DB
Client 1
Client 2
19
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Server
Client 1
Client 2
20
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Server
Client 1
Client 2
21
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Client 1
Server
Client 2
22
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Server
Client 1
R2
Client 2
23
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Client 1
R2
Client 2
Server
24
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB R1
Server
Client 1
R2
R3
Client 2
25
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB
Server
Client 1
R2
R3
Client 2
26
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
Server
DB
Client 1
R2
R3
Client 2
27
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB
Server
Client 1
R3
Client 2
28
Client 3
2. Non-blocking I/O model
Simulation: Handling Requests
Mode Asynchrone
DB
Client 1
Server
R3
Client 2
29
Client 3
2. Non-blocking I/O model
30
2. Non-blocking I/O model
31
2. Non-blocking I/O model
32
2. Non-blocking I/O model
Simulation : Asynchrone-Mode non-bloquant
33
2. Non-blocking I/O model
Simulation : Asynchrone-Mode non-bloquant
34
2. Non-blocking I/O model
Simulation : Asynchrone-Mode non-bloquant
35
2. Non-blocking I/O model
Simulation 2 : Asynchrone-Mode non-bloquant
36
3. Event-driven Model
▪ Plusieurs traitements en NodeJS sont basés sur les
événements
▪ Les événements proviennent généralement des
processus, opérations réseau, fichiers…
▪ La classe EventEmitter est au cœur de
l'architecture événementielle asynchrone en
NodeJS
37
3. Event-driven Model
Exemple 1
const EventEmitter = require ('events');
const emitter= new EventEmitter();
//register a listener
[Link]('messageLogged', function(){
[Link]('Listener called');
});
//raise an event
[Link]('messageLogged');
38
3. Event-driven Model
Exemple 1
const EventEmitter = require ('events');
event
const emitter= new EventEmitter();
emitter
//register a listener
[Link]('messageLogged', function(){
[Link]('Listener called');
});
//raise an event
[Link]('messageLogged');
register
callback
event event
function
listener 39
3. Event-driven Model
▪ Plusieurs classes dans NodeJS sont des ‘Event Emitter’ : [Link],
[Link] ...
event
emitter
Exemple 2
[Link]('connection', (stream) => {
[Link]('someone connected!');
});
register event
callback
event
function
listener
40
4. Call Stack et Event loop
Exemple 1
41
4. Call Stack et Event loop
Exemple 1
42
4. Call Stack et Event loop
Exemple 1
43
4. Call Stack et Event loop
Exemple 1
44
4. Call Stack et Event loop
Exemple 1
45
4. Call Stack et Event loop
Exemple 2
46
4. Call Stack et Event loop
Exemple 2
47
4. Call Stack et Event loop
Exemple 2
48
4. Call Stack et Event loop
Exemple 2
49
4. Call Stack et Event loop
Exemple 2
50
4. Call Stack et Event loop
Exemple 2
51
4. Call Stack et Event loop
Exemple 2
52
4. Call Stack et Event loop
Exemple 2
53
4. Call Stack et Event loop
Exemple 3
54
4. Call Stack et Event loop
Exemple 3
55
4. Call Stack et Event loop
Exemple 3
56
4. Call Stack et Event loop
Exemple 3
57
4. Call Stack et Event loop
Exemple 3
58
4. Call Stack et Event loop
Exemple 3
59
4. Call Stack et Event loop
Exemple 3
60
4. Call Stack et Event loop
Exemple 3
61
4. Call Stack et Event loop
Exemple 3
62
4. Call Stack et Event loop
Exemple 3
63
4. Call Stack et Event loop
Exemple 3
64
4. Call Stack et Event loop
Exemple 3
65
4. Call Stack et Event loop
Exemple 3
66
4. Call Stack et Event loop
Exemple 3
67
4. Call Stack et Event loop
Exemple 3
68
4. Call Stack et Event loop
Exemple 3
69
4. Call Stack et Event loop
Exemple 3
70
4. Call Stack et Event loop
Exemple 3
71
4. Call Stack et Event loop
Exemple 3
72
Exemples
▪ La boucle d'événements(Event Loop) commence à exécuter des
appels asynchrones une fois que la pile d'appels(Call Stack) est
vide. Le mélange de code sync et async a un ordre d'évaluation
distinct, le code synchrone est toujours exécuté avant l'async.
Donner l’ordre d'exécution de résultat (sans tapper ou exècuter le code):
1.
[Link]("X")
setTimeout(_ => [Link]("Y"), 0)
setImmediate(_ => [Link]("Z"))
[Link]("W")
2. [Link]("1")
setTimeout(_ => [Link]("2"), 0)
setTimeout(_ => [Link]("3"), 0)
[Link]("4")
73
Exemples
3. [Link]("P")
const timeout1 = setTimeout(_ => [Link]("Q"), 100)
const timeout2 = setTimeout(_ => [Link]("R"), 0)
clearTimeout(timeout1)
setImmediate(_ => [Link]("S"))
[Link]("T")
74
5. Création de serveurs en NodeJS
Objectif: Créer un serveur Web
● Au niveau des composants matériels: un serveur web est un
ordinateur qui stocke les fichiers qui composent un site web (par
exemple les documents HTML, les images, les feuilles de style CSS,
les fichiers JavaScript) .
● Cet ordinateur est connecté à Internet et est généralement
accessible via un nom de domaine tel que [Link]
● Au niveau des composants logiciels: un serveur web contient
différents fragments qui contrôlent la façon dont les utilisateurs
peuvent accéder aux fichiers hébergés. On trouvera a minima un
serveur HTTP. Un serveur HTTP est un logiciel qui comprend les URL
et le protocole HTTP(GET ,POST). 75
Références
1. [Link]
2. [Link]
3. [Link]
single-threaded-non-blocking-async-have-callback-queue-and-
event-loop-7f0051ca322a
4. [Link]
event-driven-architecture-223292fcbc2d/