NodeJS

Module SocketIO

SocketIO

Le module SocketIO est un des modules les plus utilisés et les plus utiles. Il va permettre de créer des WebSocket afin que le serveur puisse communiquer avec un ou plusieurs clients. Les différents interlocuteurs peuvent s'échanger tous types de données via ces WebSockets (texte, binaire, JSON, tableaux ... ). Ces échanges se font grâce à des communications asynchrone via une programmation évènementielle. Un évènement sera identifié par un nom. Un interlocuteur pourra déclarer qu'il est à l'écoute d'un type d'évènement et qu'il effectuera un traitement précis si jamais il reçoit ce type d'évènement. Nous allons ici développer un système d'opérations mathématiques rapide à implémenter. Le client fera la demande d'une opération au serveur qui retournera le résultat à tous ses clients. On va commencer par le code du côté serveur. Je vous expliquerai ensuite ce que fait ce code.

serveur.js
var io = require('socket.io').listen(8080);

io.sockets.on('connection', function (socket) {
  socket.emit('connect', "Bienvenue sur le serveur d'opérations mathématiques.");

  socket.on('addition', function (data) {
  	  sockets.emit('resultat', data['a']+data['b']);
  });

  socket.on('soustraction', function (data) {
  	  sockets.emit('resultat', data['a']-data['b']);
  });
});

Le code de serveur.js instancie donc un objet io qui écoute sur le port 8080. On définit que sur chaque évènement connection d'un socket à notre objet io, nous envoyons un message de bienvenue à cette socket. Puis, on lui demande d'écouter deux évènements, un addition et l'autre soustraction. Si jamais on capte l'un de ces deux évènements, on envoie à toutes les sockets clients l'évènement resultat avec le résultat de l'opération des deux valeurs passées dans un JSON par un des clients. On a initié un dialogue clients-serveur côté serveur en 6 lignes, c'est très efficace.

Pour le code côté client, il faudra l'ajouter entre deux balises script d'une page web. Au préalable, pour pouvoir utiliser les SocketIO, vous mettrez "/socket.io/socket.io.js" comme attribut src d'une balise script. Le code suivant est relativement simple, à la connexion au serveur écoutant sur le port 8080, il envoie deux évènements, un soustraction et un autre addition, avec les deux opérandes passées en JSON. Ces opérations seront alors effectuées côté serveur puis le résultat sera envoyé à tous les clients du serveur. Ensuite, les clients pourront faire ce qu'ils veulent de ce résultat en captant l'évènement résultat.

  var socket = io.connect('http://localhost:8080');

  socket.emit('addition', { a: 10, b: 20 });
  socket.emit('soustraction', { a: 2, b: 1 });