SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Par Jame Gaglo
Dans Node, plusieurs objets émettent des événements. Par
exemple, un serveur TCP émet un événement « connect »
chaque fois qu’un client est connecté.
Ces objets sont, dans la nomenclature de Node, les émetteurs
d'événements. Les émetteurs d'événements permettre aux
programmeurs de s'abonner à des événements qui les
intéressent. Le programmeur attache une fonction de rappel
qui sera appelée chaque fois qu'un événement pertinent à
cet émetteur d'événements se produit. Ce modèle éditeur /
abonné est très semblable au modèle type GUI, lequel
un programme reçoit notification qu'un certain bouton a été
cliqué. En utilisant ce modèle, un programme côté serveur
peut réagir ,par exemple,lorsqu'un client se connecte au
serveur, les données sont disponibles sur une socket.
2par James Gaglo
Il s'agit d'un style dans lequel une fonction appelle une fonction
de rappel après l'opération soit terminée, afin que votre
programme puisse se poursuivre. Comme vous le verrez,
JavaScript se prête à ce type de programmation. Voici un
exemple de Node qui implique de charger un fichier en
mémoire:
var fs = require('fs');
fs.readFile('/etc/passwd', function(err, fileContent) {
if (err) {
throw err;
}
console.log('file content', fileContent.toString());
});
3par James Gaglo
Le modèle standard de rappel fonctionne bien
lorsque vous voulez que le client soit averti quand
une fonction a fini d'être exécutée.
Mais si plusieurs événements ont lieu lors de
l'exécution, ou si elles se produisent à plusieurs
reprises, ce style ne fonctionne pas bien.
Par exemple, si vous souhaitez être averti chaque fois
que des données sont disponibles sur un socket, le
modèle standard de rappel n'est pas très utile.
C'est alors que le modèle émetteur d'événements
peut aider. Vous pouvez utiliser une interface
standard pour séparer clairement l'émetteur
d'événements et de l'écouteur d'événements.
4par James Gaglo
Lorsque vous utilisez un modèle émetteur
d'événements, deux objets ou plus sont
impliquées, l'émetteur d'événements et un ou
plusieurs écouteurs d'événements.
Un émetteur d'événements est un objet qui,
comme son nom l'indique, émet des
événements. Un écouteur d'événement est une
partie du code qui se lie à l'émetteur
d'événements et est à l'écoute de certains types
d'événements, comme dans cet exemple:
5par James Gaglo
1. var req = http.request(options, function(response)
{
2. response.on("data", function(data) {
3. console.log("some data from the response",
data);
4. });
5. response.on("end", function() {
6. console.log("response ended");
7. });
8. });
9. req.end();
6par James Gaglo
Ici, nous voyons quelques étapes nécessaires pour gérer
une requếte HTTP par un serverur HTTP utilisant
Node.
Ligne 1 utilise le style passage de continuation,
passant dans une fonction inline qui sera exécutée une fois
que la réponse est disponible. L'API HTTP request
utilise les CPS ici parce que le programme continue de
s'exécuter après la fonction http.request se termine.
Une fois terminée, la fonction http.request appelle le
rappel, en passant un objet de réponse. Cet
objet de réponse est un émetteur d'événements et, selon la
documentation de Node, peut émettre, entre
autres, les événements data et end.
7par James Gaglo
Notez que les événements émis ont toujours un
type, qui est représenté par une chaîne. Dans
l'exemple précédent, on avait les
types d'événements "data" et "end". Ce sont des
chaînes arbitraires spécifiées par l'émetteur
d'événements, par convention, les types
d'événements sont généralement minuscules
mots sans espaces.
L'API que vous utilisez doit documenter les types
d'événements qu'il émet.
8par James Gaglo
Un émetteur d'événements est une interface
générique qui sert tout type d'événement, mais
il y a un cas particulier dans la mise en œuvre
dans Node, et c'est l'évènement "error". La
plupart des implémentations émetteur
d'événements dans le Node émet un
évènement "error" chaque fois qu'il ya une
erreur.
9par James Gaglo
Tout objet qui implémente le modèle émetteur
d'événements (comme un Socket TCP, une requête
HTTP, et beaucoup d'autres) met en œuvre un
ensemble de méthodes:
 addListener et on : Pour ajouter un écouteur
d'événements à un type d'événement
 once : Pour attacher un écouteur d'événement à un
type d'événement donné qui sera appelée au plus une
fois
 removeEventListener: Pour supprimer un écouteur
d'événements d'un événement donné
 removeAllEventListeners - Pour supprimer tous les
écouteurs d'événements d'un type d'événement donné
10par James Gaglo
 Lier des fonctions Callbacks à l'aide de .addListener() ou
.on()
En spécifiant un type d'événement et une fonction de rappel,
vous pouvez souscrire une fonction à appeler lorsque l'un
de ces événements se produit. Par exemple, une lecture d'un
flux de fichier lecture peut émettre un événement "data"
quand un morceau de données est disponible. Voici
comment vous pouvez être informé de ce qui passe par une
fonction de rappel:
1. function receiveData(data) {
2. console.log("got data from file read stream: %j", data);
3. }
4. readStream.addListener(“data”, receiveData);
11par James Gaglo
 Lier des fonctions Callbacks à l'aide de .addListener() ou
.on()
Au lieu d'utiliser la fonction .addListener, vous pouvez utiliser
.on, qui est simplement un raccourci. la
le code suivant est équivalent:
1. readStream.on("data", function(data) {
2. console.log("got data from file read stream: %j", data);
3. });
Dans le code précédent nous utilisons une fonction nommée
que nous avons déclarée à l'avance, mais dans celui-ci une
fonction inline anonyme est utilisée pour être plus succinct.
12par James Gaglo
 Lier des fonctions Callbacks à l'aide de
.addListener() ou .on()
Les arguments qui sont passés à la fonction de
rappel dépendent de l'événement spécifié par l'
objet émetteur et le type d'événement et ne sont
pas normalisés. Un événement "data" pourrait
émettre des données tampons "data",
un évènement "error" pourrait émettre l'objet
"error", et le flux d'événement "end" ne pourrait
émettre aucune valeur.
13par James Gaglo
 Lier plusieurs Listners
Le modèle émetteur d'événements permet à plusieurs
écouteurs d'événements d'écouter le même type
d'événement sur ​​le même émetteur d'événements.
Par exemple:
1. readStream.on("data", function(data) {
2. console.log('I have some data here.');
3. });
4. readStream.on("data", function(data) {
5. console.log('I have some data here too.');
6. });
14par James Gaglo
 Professional Nodejs de Pedro Teixeira
par James Gaglo 15

Contenu connexe

En vedette

Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introVictor Pascual Ávila
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspectiveshwetank
 
Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSKokou Gaglo
 
Communication événementielle
Communication événementielleCommunication événementielle
Communication événementielleVirginie Colombel
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...Kokou Gaglo
 
Etude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeEtude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeHermann GBILIMAKO
 

En vedette (7)

Upperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC introUpperside WebRTC conference - WebRTC intro
Upperside WebRTC conference - WebRTC intro
 
WebRTC: A front-end perspective
WebRTC: A front-end perspectiveWebRTC: A front-end perspective
WebRTC: A front-end perspective
 
Mise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMSMise en place d’une plateforme de formation IMS
Mise en place d’une plateforme de formation IMS
 
Communication événementielle
Communication événementielleCommunication événementielle
Communication événementielle
 
Contributions aux environnements de développement de services de télécoms da...
Contributions aux environnements de développement de  services de télécoms da...Contributions aux environnements de développement de  services de télécoms da...
Contributions aux environnements de développement de services de télécoms da...
 
Etude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS SécuriséeEtude et mise en place d'un plateforme IMS Sécurisée
Etude et mise en place d'un plateforme IMS Sécurisée
 
Design pattern
Design patternDesign pattern
Design pattern
 

Similaire à Programmation evénementielle

ACRA - Présentation PAUG Avril 2011
ACRA - Présentation PAUG Avril 2011ACRA - Présentation PAUG Avril 2011
ACRA - Présentation PAUG Avril 2011Kevin Gaudin
 
173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-socketsnaimanaima1
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expériencelouschwartz
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flexdavid deraedt
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flexdavid deraedt
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJsimeon
 
SplunkLive! Paris 2018: Getting Data In
SplunkLive! Paris 2018: Getting Data InSplunkLive! Paris 2018: Getting Data In
SplunkLive! Paris 2018: Getting Data InSplunk
 
Petit glossaire de termes informatiques
Petit glossaire de termes informatiquesPetit glossaire de termes informatiques
Petit glossaire de termes informatiquesAGELLID Bucama
 
Connected Developper Ep6 (25-05-2013)
Connected Developper Ep6 (25-05-2013)Connected Developper Ep6 (25-05-2013)
Connected Developper Ep6 (25-05-2013)Badr Hakkari
 
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...Frédéric FAURE
 
Ysance conference - cloud computing - aws - 3 mai 2010
Ysance   conference - cloud computing - aws - 3 mai 2010Ysance   conference - cloud computing - aws - 3 mai 2010
Ysance conference - cloud computing - aws - 3 mai 2010Ysance
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorArthurMaroulier
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Farouk Mezghich
 

Similaire à Programmation evénementielle (20)

Tutoriel esper
Tutoriel esperTutoriel esper
Tutoriel esper
 
8-socket.pdf
8-socket.pdf8-socket.pdf
8-socket.pdf
 
Introduction aux-sockets
Introduction aux-socketsIntroduction aux-sockets
Introduction aux-sockets
 
ACRA - Présentation PAUG Avril 2011
ACRA - Présentation PAUG Avril 2011ACRA - Présentation PAUG Avril 2011
ACRA - Présentation PAUG Avril 2011
 
173544 introduction-aux-sockets
173544 introduction-aux-sockets173544 introduction-aux-sockets
173544 introduction-aux-sockets
 
Utilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérienceUtilisation de ZK avec Java - Retour d’expérience
Utilisation de ZK avec Java - Retour d’expérience
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
iTunes Stats
iTunes StatsiTunes Stats
iTunes Stats
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
Fondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application FlexFondamentaux d'architecture d'une application Flex
Fondamentaux d'architecture d'une application Flex
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Aspect avec AspectJ
Aspect avec AspectJAspect avec AspectJ
Aspect avec AspectJ
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
SplunkLive! Paris 2018: Getting Data In
SplunkLive! Paris 2018: Getting Data InSplunkLive! Paris 2018: Getting Data In
SplunkLive! Paris 2018: Getting Data In
 
Petit glossaire de termes informatiques
Petit glossaire de termes informatiquesPetit glossaire de termes informatiques
Petit glossaire de termes informatiques
 
Connected Developper Ep6 (25-05-2013)
Connected Developper Ep6 (25-05-2013)Connected Developper Ep6 (25-05-2013)
Connected Developper Ep6 (25-05-2013)
 
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...
Amazon Web Services User Group - France - 3 mai 2010 - Optimisation et Automa...
 
Ysance conference - cloud computing - aws - 3 mai 2010
Ysance   conference - cloud computing - aws - 3 mai 2010Ysance   conference - cloud computing - aws - 3 mai 2010
Ysance conference - cloud computing - aws - 3 mai 2010
 
Symposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme MeteorSymposium n°7 : Plateforme Meteor
Symposium n°7 : Plateforme Meteor
 
Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)Formation iPhone ENSI by (Orange Tunisie)
Formation iPhone ENSI by (Orange Tunisie)
 

Plus de Kokou Gaglo

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)Kokou Gaglo
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Kokou Gaglo
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsKokou Gaglo
 
MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.Kokou Gaglo
 

Plus de Kokou Gaglo (7)

Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
IP Multimedia Subsystem : Démarrer avec Mobicents JainSLEE (Partie 1)
 
Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse Mybatis : Spring Data à la rescousse
Mybatis : Spring Data à la rescousse
 
Spring Batch
Spring BatchSpring Batch
Spring Batch
 
Intégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec JenkinsIntégration continue et déploiement continue avec Jenkins
Intégration continue et déploiement continue avec Jenkins
 
Java - Lombok
Java - LombokJava - Lombok
Java - Lombok
 
MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.MyBatis, une alternative à JPA.
MyBatis, une alternative à JPA.
 

Programmation evénementielle

  • 2. Dans Node, plusieurs objets émettent des événements. Par exemple, un serveur TCP émet un événement « connect » chaque fois qu’un client est connecté. Ces objets sont, dans la nomenclature de Node, les émetteurs d'événements. Les émetteurs d'événements permettre aux programmeurs de s'abonner à des événements qui les intéressent. Le programmeur attache une fonction de rappel qui sera appelée chaque fois qu'un événement pertinent à cet émetteur d'événements se produit. Ce modèle éditeur / abonné est très semblable au modèle type GUI, lequel un programme reçoit notification qu'un certain bouton a été cliqué. En utilisant ce modèle, un programme côté serveur peut réagir ,par exemple,lorsqu'un client se connecte au serveur, les données sont disponibles sur une socket. 2par James Gaglo
  • 3. Il s'agit d'un style dans lequel une fonction appelle une fonction de rappel après l'opération soit terminée, afin que votre programme puisse se poursuivre. Comme vous le verrez, JavaScript se prête à ce type de programmation. Voici un exemple de Node qui implique de charger un fichier en mémoire: var fs = require('fs'); fs.readFile('/etc/passwd', function(err, fileContent) { if (err) { throw err; } console.log('file content', fileContent.toString()); }); 3par James Gaglo
  • 4. Le modèle standard de rappel fonctionne bien lorsque vous voulez que le client soit averti quand une fonction a fini d'être exécutée. Mais si plusieurs événements ont lieu lors de l'exécution, ou si elles se produisent à plusieurs reprises, ce style ne fonctionne pas bien. Par exemple, si vous souhaitez être averti chaque fois que des données sont disponibles sur un socket, le modèle standard de rappel n'est pas très utile. C'est alors que le modèle émetteur d'événements peut aider. Vous pouvez utiliser une interface standard pour séparer clairement l'émetteur d'événements et de l'écouteur d'événements. 4par James Gaglo
  • 5. Lorsque vous utilisez un modèle émetteur d'événements, deux objets ou plus sont impliquées, l'émetteur d'événements et un ou plusieurs écouteurs d'événements. Un émetteur d'événements est un objet qui, comme son nom l'indique, émet des événements. Un écouteur d'événement est une partie du code qui se lie à l'émetteur d'événements et est à l'écoute de certains types d'événements, comme dans cet exemple: 5par James Gaglo
  • 6. 1. var req = http.request(options, function(response) { 2. response.on("data", function(data) { 3. console.log("some data from the response", data); 4. }); 5. response.on("end", function() { 6. console.log("response ended"); 7. }); 8. }); 9. req.end(); 6par James Gaglo
  • 7. Ici, nous voyons quelques étapes nécessaires pour gérer une requếte HTTP par un serverur HTTP utilisant Node. Ligne 1 utilise le style passage de continuation, passant dans une fonction inline qui sera exécutée une fois que la réponse est disponible. L'API HTTP request utilise les CPS ici parce que le programme continue de s'exécuter après la fonction http.request se termine. Une fois terminée, la fonction http.request appelle le rappel, en passant un objet de réponse. Cet objet de réponse est un émetteur d'événements et, selon la documentation de Node, peut émettre, entre autres, les événements data et end. 7par James Gaglo
  • 8. Notez que les événements émis ont toujours un type, qui est représenté par une chaîne. Dans l'exemple précédent, on avait les types d'événements "data" et "end". Ce sont des chaînes arbitraires spécifiées par l'émetteur d'événements, par convention, les types d'événements sont généralement minuscules mots sans espaces. L'API que vous utilisez doit documenter les types d'événements qu'il émet. 8par James Gaglo
  • 9. Un émetteur d'événements est une interface générique qui sert tout type d'événement, mais il y a un cas particulier dans la mise en œuvre dans Node, et c'est l'évènement "error". La plupart des implémentations émetteur d'événements dans le Node émet un évènement "error" chaque fois qu'il ya une erreur. 9par James Gaglo
  • 10. Tout objet qui implémente le modèle émetteur d'événements (comme un Socket TCP, une requête HTTP, et beaucoup d'autres) met en œuvre un ensemble de méthodes:  addListener et on : Pour ajouter un écouteur d'événements à un type d'événement  once : Pour attacher un écouteur d'événement à un type d'événement donné qui sera appelée au plus une fois  removeEventListener: Pour supprimer un écouteur d'événements d'un événement donné  removeAllEventListeners - Pour supprimer tous les écouteurs d'événements d'un type d'événement donné 10par James Gaglo
  • 11.  Lier des fonctions Callbacks à l'aide de .addListener() ou .on() En spécifiant un type d'événement et une fonction de rappel, vous pouvez souscrire une fonction à appeler lorsque l'un de ces événements se produit. Par exemple, une lecture d'un flux de fichier lecture peut émettre un événement "data" quand un morceau de données est disponible. Voici comment vous pouvez être informé de ce qui passe par une fonction de rappel: 1. function receiveData(data) { 2. console.log("got data from file read stream: %j", data); 3. } 4. readStream.addListener(“data”, receiveData); 11par James Gaglo
  • 12.  Lier des fonctions Callbacks à l'aide de .addListener() ou .on() Au lieu d'utiliser la fonction .addListener, vous pouvez utiliser .on, qui est simplement un raccourci. la le code suivant est équivalent: 1. readStream.on("data", function(data) { 2. console.log("got data from file read stream: %j", data); 3. }); Dans le code précédent nous utilisons une fonction nommée que nous avons déclarée à l'avance, mais dans celui-ci une fonction inline anonyme est utilisée pour être plus succinct. 12par James Gaglo
  • 13.  Lier des fonctions Callbacks à l'aide de .addListener() ou .on() Les arguments qui sont passés à la fonction de rappel dépendent de l'événement spécifié par l' objet émetteur et le type d'événement et ne sont pas normalisés. Un événement "data" pourrait émettre des données tampons "data", un évènement "error" pourrait émettre l'objet "error", et le flux d'événement "end" ne pourrait émettre aucune valeur. 13par James Gaglo
  • 14.  Lier plusieurs Listners Le modèle émetteur d'événements permet à plusieurs écouteurs d'événements d'écouter le même type d'événement sur ​​le même émetteur d'événements. Par exemple: 1. readStream.on("data", function(data) { 2. console.log('I have some data here.'); 3. }); 4. readStream.on("data", function(data) { 5. console.log('I have some data here too.'); 6. }); 14par James Gaglo
  • 15.  Professional Nodejs de Pedro Teixeira par James Gaglo 15