Pub/Sub : concepts clés et utilisation pour une app temps réel

English version


On attend de plus en plus des applications web et mobiles qu'elles mettent à jour leurs informations en temps réel.

 

Que ce soit pour suivre les cours de la bourse, réserver un VTC ou discuter sur une messagerie instantanée, l'application doit se mettre à jour sans que cela nécessite une action de l'utilisateur.

 

Dans cet article, nous allons voir quelles sont les concepts derrière les applications temps réel avec notamment le Pub/Sub puis nous verrons comment l’utiliser avec Kuzzle.

 

 

Pub/Sub : notifier vos clients en temps réel

 

Le concept de Publisher/Subscriber, ou Pub/Sub, est un concept dans lequel un canal de communication (topic) est mis en place entre un serveur et plusieurs clients. Ce canal est représenté par une communication réseau persistante (WebSocket, MQTT, etc).

 

Les clients, ou subscribers, vont d'abord s'abonner aux notifications reçues dans un canal précis. Puis le serveur, ou publisher, va envoyer des données aux client à travers ce canal.

 

concept-pub-sub
 

Ainsi lorsque de nouvelles informations sont disponibles, le serveur peut notifier les différents clients.

 

 

Faciliter vos développement Pub/Sub avec Kuzzle

 

Avec Kuzzle, il est très simple d'implémenter le concept de Pub/Sub dans votre application.

 

Pour cela nous allons utiliser:

 

 

Tout d’abord, nous allons nous abonner à un canal de notification. Dans Kuzzle, un canal est identifié par le nom d'un index, le nom d'une collection et des filtres.

 

Nous reviendrons plus tard sur les filtres, concernant l'index et la collection, il n'est pas nécessaire que ceux-ci existent réellement en base pour le Pub/Sub, ils servent uniquement à définir un canal de communication.

Pour nous abonner aux notifications d'un canal, nous allons utiliser la méthode subscribe du contrôleur Realtime.

 

Le dernier paramètre est une callback qui sera appelé à chaque nouvelle notification reçue.

 

const filters = {};

await kuzzle.realtime.subscribe('index', 'collection', filters, notification => {
  // Do something with the notification
});

 

Nous allons maintenant publier des messages dans le même canal, ils seront transmis à tous les clients abonnées à ce canal.

Pour cela nous allons utiliser la méthode publish du contrôleur Realtime.

 

await kuzzle.realtime.publish('index', 'collection', { content: 'liia meh ry' });

 

Les clients abonnés à ce canal de communication vont tous recevoir le message { content: ‘liia meh ry’ }.

L'implémentation du concept de Pub/Sub dans une application se fait très simplement avec l'aide de Kuzzle et nos SDK.

 

L'utilisation d'un protocol persistant est nécessaire pour pouvoir faire du Pub/Sub, pour vos applications web ou mobile nous recommandons d'utiliser le protocol WebSocket et pous vos applications IoT vous pouvez utiliser le protocol MQTT.

 

 

Complexité des développements en Pub/Sub

 

Bien qu’il soit simple à mettre en place, le concept de Pub/Sub peut poser des problèmes de maintenabilité et de scalabilité.

 

Pour chaque information que vous souhaitez mettre à disposition en temps réel, vous devez créer un nouveau canal de communication, vos clients doivent s'y abonner puis finalement vous devez y envoyer vos données.

 

Une certaine quantité de code est nécessaire à développer, à tester et à maintenir côté serveur pour faire du Pub/Sub.

 

À Kuzzle, même si nous aimons beaucoup le temps réel, nous trouvons que le concept de Pub/Sub est limité et que sa mise en place demande de nombreuses ressources.

 

Nous avons donc développé notre propre moteur de temps réel pour pallier à ces problèmes et permettre d’accélérer le développement d’application temps réel.

 

Rendez-vous la semaine prochaine pour la suite de cette série d'articles sur les applications temps réel!

 

Adrien Maret

Postes associés