Sockets
Maintenant que le serveur HTTP est déployé, il est temps de mettre en place une méthode de communication bidirectionnelle temps réel à base de sockets.
socket.io
socket.io est un module pour Node.js permettant d'utiliser des sockets. Il est composé d'une partie serveur et d'une bibliothèque à destination des clients.
Après avoir installé le module,
npm install socket.io
Ajouter le code ci-dessous aux fichiers server.js
et
client.js
.
/*
* server.js
*
*/
/*
* Binds a socket server to the current HTTP server
*
*/
let socketServer = require('socket.io')(http);
// Registers an event listener ('connection' event)
socketServer.on('connection', (socket) => {
console.log('A new user is connected...');
});
/*
* client.js
*
*/
let socketClient = io();
Envoi et réception de messages
La communication bidirectionnelle avec socket.io repose sur des méthodes d'envoi et de réception de messages, disponibles côté serveur et côté client.
Côté serveur
socketServer.emit() |
Envoie un message à tous les clients connectés |
socket.emit() |
Envoie un message au client connecté via l'objet socket |
socket.broadcast.emit() |
Envoie un message à tous les clients à l'exception de celui connecté via l'objet socket |
socketServer.on() |
Enregistre un écouteur d'événement émanant de tous les clients |
socket.on() |
Enregistre un écouteur d'événement émanant du client connecté via l'objet socket |
Côté client
socketClient.emit() |
Envoie un message au serveur |
socketClient.on() |
Enregistre un écouteur d'événement émanant du serveur |
Afin d'illustrer l'utilisation de ces méthodes, voici un exemple simple de
communication à l'aide des sockets. Ajoutez les lignes ci-dessous aux fichiers
server.js
et client.js
et observez les échanges à l'aide
du terminal (côté serveur) et de la console JavaScript (côté client).
/*
* server.js
*/
/*
* Binds a socket server to the current HTTP server
*
*/
let socketServer = require('socket.io')(http);
socketServer.on('connection', function (socket) {
console.log('A new user is connected...');
/*
* Registers an event listener
*
* - The first parameter is the event name
* - The second parameter is a callback function that processes
* the message content.
*/
socket.on('hello', (content) => {
console.log(content + ' says hello!');
// Pushes an event to all the connected clients
socketServer.emit('notification', content + ' says hello!');
// Pushes an event to the client related to the socket object
socket.emit('hello', 'Hi ' + content + ', wassup mate?');
});
});
/*
* client.js
*/
let socketClient = io();
/*
* Emits an event to the server
*
* - The first parameter is the event name.
* - The second parameter is the message content: it can be a number,
* a string or an object.
*/
socketClient.emit('hello', 'Olivier');
/*
* Registers event listeners
*
* - The first parameter is the event name
* - The second parameter is a callback function that processes
* the message content.
*/
socketClient.on('notification', (content) => {
console.log(content);
});
socketClient.on('hello', (content) => {
console.log(content);
});