---
title: Développer une nouvelle génération d'applications avec le moteur en temps réel Kuzzle
description: Une nouvelle façon de faire du temps réel scalable avec le moteur temps réel nouvelle génération de Kuzzle avec les notifications de la base de données.
image: https://blog.kuzzle.io/hubfs/tech_%20Use%20Kuzzle%20to%20develop%20your%20real-time%20apps%20faster%20(4).png
---

<https://kuzzle.io/>

c'est ici qu'on rajoute le truc en français<-->

- [EN](https://kuzzle.io)
- [Github](https://github.com/kuzzleio)
- [Offre d'emploi](https://kuzzle.io/fr/a-propos/rejoignez-kuzzle/)
- [Nous Contacter](https://info.kuzzle.io/contacter-kuzzle?hsLang=fr)
- [Newsletter](https://info.kuzzle.io/inscription-a-notre-newsletter?hsLang=fr)
- [Blog FR](https://blog.kuzzle.io/fr/)
- [Télécharger](https://kuzzle.io/download)

- [Notre Vision](https://kuzzle.io/fr/a-propos/notre-vision/)
- [Kuzzle en 5 minutes](https://kuzzle.io/fr/a-propos/kuzzle-en-5-minutes/)
- [L'équipe](https://kuzzle.io/fr/a-propos/l-equipe/)
- [Rejoignez l'équipe Kuzzle](https://kuzzle.io/fr/a-propos/rejoignez-kuzzle/)
- [Espace Presse](https://kuzzle.io/fr/a-propos/presse/)

Suivez-nous

- <https://www.facebook.com/kuzzleio>
- <https://twitter.com/kuzzleio>
- <https://github.com/kuzzleio/kuzzle>

# Moteur temps réel Kuzzle: développer une nouvelle génération d'apps

Par Alicia Thermos le 27 mai 2019

[English version](https://blog.kuzzle.io/develop-a-new-generation-of-apps-with-kuzzle-real-time-engine?hsLang=fr)

Dans la première partie nous avons vu comment il est possible de mettre à disposition des informations en temps réel à un ensemble de client à travers le concept de Pub/Sub.

Dans cette partie, nous allons voir de quelle manière Kuzzle résout certaines limites dues à l'utilisation du Pub/Sub grâce à son moteur de temps réel nouvelle génération.

 

Cet article fait partie d'une série sur le développement d'applications temps réel:

- [Pub/Sub : concepts clés et utilisation pour une app temps réel](https://blog.kuzzle.io/fr/pub-sub-pour-applications-temps-reel?hsLang=fr)
- [Développer une nouvelle génération d'applications avec le moteur temps réel de Kuzzle](https://blog.kuzzle.io/fr/developper-nouvelle-generation-apps-avec-moteur-temps-reel-kuzzle?hsLang=fr)

## Notifications automatiques depuis la base de données

 

Pour remédier aux limites du Pub/Sub, nous avons implémenté notre propre moteur de temps réel, [Koncorde](https://docs.kuzzle.io/koncorde/1/essentials/introduction/), et nous l'avons **directement branché sur notre base de données**.

 

Avec Kuzzle, les clients ne s'abonnent pas à des canaux de communications mais à des **modifications de la base de données**.

Ainsi, il est possible de recevoir des notifications lorsqu'un document est **créé**, **modifié** ou **supprimé** sans avoir besoin de créer un canal de communication dédié.

 

Lorsqu'un client souhaite s'abonner à des notifications temps réel, il doit fournir **le nom de l'index et de la collection** contenant les documents qui l'intéressent. Il sera ensuite **notifié lorsque des changements** (ajout, modification, suppression) interviendront sur cette collection.

### Exemple: suivi en temps réel d'asset sur une carte

Prenons un exemple pour comprendre la différence avec le Pub/Sub.

 

Imaginons une application de suivi de conteneurs de fret, chaque conteneur possède une **balise GPS IoT** reliée à Kuzzle en MQTT et **enregistre sa nouvelle position** dans Kuzzle toute les 10 secondes pour **conserver un historique**.

 

Du côté de l'opérateur, une application web permet de **visualiser la position des conteneurs sur une carte en temps réel**.

 

Avec du Pub/Sub, la suite d’actions nécessaires est la suivante:

1. le client web s’abonne à un canal de communication prédéfini,
2. la balise GPS IoT enregistre sa position dans le backend,
3. le backend publie la position dans le canal de communication,
4. le client web est notifié de la nouvelle position

![](https://lh6.googleusercontent.com/qF3UXf-_n5FMxsDy5vCVvfs-20RYz0aTpxyqtnilXwqnJmaEQkOZaDwTbKqHc5jv3P6iXKLkBdM1N8Z5BCUa3vyRUy4v17AtStS3grg-6pwh412jFNeEMiuxBfahWM6IxTLz24UZ)

 

Avec Kuzzle, le principe est le même sauf qu’il n’y a pas besoin de publier manuellement la nouvelle position:

1. Le client web s’abonne à des changements de la base de données ([realtime:subscribe](https://docs.kuzzle.io/sdk-reference/js/6/realtime/subscribe/)),
2. la balise GPS IoT enregistre sa position dans Kuzzle ([document:create](https://docs.kuzzle.io/api/1/controller-document/create/)),
3. le client web est notifié de la nouvelle position

 

![](https://blog.kuzzle.io/hs-fs/hubfs/image-2.png?width=397&name=image-2.png) 

L’utilisation du [protocol MQTT](https://docs.kuzzle.io/protocols/1/native-protocols/mqtt/) pour la balise GPS IoT et du [SDK Javascript](https://docs.kuzzle.io/sdk-reference/js/6) côté application web allège la quantité de code nécessaire côté client, mais surtout il n'y a aucune ligne de code côté serveur !

 

**La mise à disposition en temps réel d'une information s'implémente uniquement du côté client sans avoir besoin d'intervenir sur le serveur.**

## Filtrer vos notifications côté client

J'ai évoqué la possibilité pour les clients de renseigner des [filtres](https://docs.kuzzle.io/koncorde/1/essentials/terms/) lors de l'abonnement aux notifications temps réel de Kuzzle.

 

À l'aide de ces derniers, vous pouvez **filtrer finement les informations reçues** en temps réel par les clients, toujours sans intervenir côté serveur.

### Exemple: suivre la position d'un seul asset

Reprenons notre exemple d’application de suivi de conteneurs.

 

Tous les conteneurs enregistrent leurs nouvelles positions dans la même collection **en spécifiant leur identifiant unique**.

Côté application web, je souhaite **afficher la position d'un seul conteneur**.

 

Avec [un filtre](https://docs.kuzzle.io/koncorde/1/essentials/terms/), je vais pouvoir indiquer à Kuzzle que je souhaite recevoir uniquement les notifications concernant le conteneur de mon choix.

 

```
const filters = {
  equals: { containerId: 'foobar' }
};

await kuzzle.realtime.subscribe('containers', 'positions', filters, notification => {
  // Only notifications about the 'foobar' container
});
```

 

Il est possible de recevoir uniquement les informations dont j'ai réellement besoin et toujours sans écrire une ligne supplémentaire côté serveur.

 

**Si vous connaissez GraphQL, c'est le même principe. Le client demande au serveur uniquement les notifications dont il a besoin.**

 

Nous avons développé un grand nombre de[filtres différents](https://docs.kuzzle.io/koncorde/1/essentials/terms/) et il est possible de filtrer tout ce que vous souhaitez en les combinant avec nos [différents opérateurs](https://docs.kuzzle.io/koncorde/1/essentials/operands/).

## Géorepérage en temps réel

Nous allons parler d’un type de filtre en particulier: [les filtres de georepérage](https://docs.kuzzle.io/koncorde/1/essentials/terms/#geoboundingbox).

 

Ce type de filtre définit une zone géographique précise pour ensuite recevoir des notifications lorsque des documents localisés par une position GPS entrent ou sortent de cette zone.

 

Ces filtres peuvent prendre différentes formes, des [cercles](https://docs.kuzzle.io/koncorde/1/essentials/terms/#geodistance), des [rectangles](https://docs.kuzzle.io/koncorde/1/essentials/terms/#geoboundingbox) ou même le [polygone](https://docs.kuzzle.io/koncorde/1/essentials/terms/#geopolygon) de votre choix.

### Exemple: suivre uniquement les assets présents en France

Revenons à notre monitoring de conteneurs.

 

Chaque opérateur étant responsable d'une zone particulière, l'application web doit être capable de ne **montrer que les conteneurs de cette zone**.

 

Il n'y a qu'à appliquer un filtre de géorepérage correspondant à la zone choisie et Kuzzle n'enverra que les nouvelles positions des conteneurs se trouvant à l'intérieur de cette zone.

 

```
const filters = {
  geoPolygon: {
    location: {
      points: [
        [2.35107421875, 51.0275763378024],
        [-4.89990234375, 48.472921272487824],
        [-1.6259765625, 43.48481212891603],
        [3.01025390625, 42.48830197960227],
        [7.62451171875, 43.77109381775651],
        [8.173828125, 48.980216985374994],
        [2.35107421875, 51.0275763378024]
      ]
    }
  }
};

await kuzzle.realtime.subscribe('containers', 'positions', filters, notification => {
  // Only notifications about containers in France
});
```

 

Pour définir facilement vos polygones vous pouvez utiliser un site comme [http://geojson.io/](http://geojson.io/).

 

![](https://lh4.googleusercontent.com/RuSXLGcXsovnQmDcYRBCsHN5KvCwyMH7on-r1rfDO35jvzlH8x05hq5-SfuVX3tysBJX5sNwUJixttXX31r2oOIRboMWw8yZrNWVX8WLZeE23zY0PGg_0A4DMuAA3cfjFsllD-1E)

 

 

Avec Kuzzle, il est très simple de développer des applications temps réel embarquant des notions de monitoring ou d'alerting basées sur des positions géographiques.

 

Si le géofencing en temps réel vous intéresse, vous pouvez aller voir notre chaîne Youtube avec [une vidéo sur le géomarketing en temps réel](https://www.youtube.com/watch?v=1LQLjTDt8f4).

## Et les performances alors ?

Comme vous le savez déjà peut-être, ici à Kuzzle nous accordons beaucoup d'importance à la performance de nos produits.

 

Notre moteur de temps réel, [Koncorde](https://github.com/kuzzleio/koncorde), est lui aussi open-source et disponible sur Github.

Vous pourrez constater qu'une attention particulière a été portée à l'ensemble du code, notamment via des **optimisations spécifiques par rapport au moteur Node.js** ou par des **modules natifs compilés en C.**

 

Les [benchmarks sur les filtres des notifications temps réel](https://github.com/kuzzleio/koncorde#benchmarks) affichent des performances très élevées avec plusieurs dizaines de milliers d'opérations par seconde, même sur des filtres complexes tels que les filtres de georepérage.

 

Par exemple sur un laptop i5-7300U CPU @ 2.60GHz et 16GO de RAM, il est possible de monter jusqu’à 64 000 notifications/sec avec 10 000 clients connectés et un total de 100 000 filtres de géorepérage différents.

 

Dans le prochain article, nous aborderons les problématiques de performance et de scaling des applications impliquant un grand nombre d’utilisateurs de notifications temps réel. Cette fois je vous montrerai comment nous réalisons nos benchmarks plutôt que de vous tirer des chiffres de mon chapeau ;-)

 

À bientôt !

 

- [Tweet](https://twitter.com/share)

![Alicia Thermos](https://app.hubspot.com/settings/avatar/47c07be51c528b59e92581e25bfcc712)

Par Alicia Thermos le 27 mai 2019

### Postes associés

 Qu'est-ce que Kuzzle ?

 Kuzzle est un backend sécurisé, évolutif, entièrement personnalisable et open-source.  
 Il dispose également d'une console d'administration, de notifications en temps réel, de fonctions de géofencing et d'un moteur de recherche rapide. 

[Prise en main](https://kuzzle.io/start)

Une question? [C'est ici](https://gitter.im/kuzzleio/kuzzle)

[![cta-discover-kuzzle-fr](https://no-cache.hubspot.com/cta/default/3803374/82d4c883-8082-4587-92e3-09c146d13bc2.png)](https://cta-redirect.hubspot.com/cta/redirect/3803374/82d4c883-8082-4587-92e3-09c146d13bc2)

[![cta-dive-in-kuzzle-fr](https://no-cache.hubspot.com/cta/default/3803374/f426ae55-8332-440b-a5ac-7a13afb52ac3.png)](https://cta-redirect.hubspot.com/cta/redirect/3803374/f426ae55-8332-440b-a5ac-7a13afb52ac3)

### categories

- [Bâtiments intelligents (4)](https://blog.kuzzle.io/fr/tag/bâtiments-intelligents)
- [Jumeaux numériques (5)](https://blog.kuzzle.io/fr/tag/jumeaux-numériques)
- [Kuzzle (8)](https://blog.kuzzle.io/fr/tag/kuzzle)
- [Logistique et transport (1)](https://blog.kuzzle.io/fr/tag/logistique-et-transport)
- [Plateforme IoT (12)](https://blog.kuzzle.io/fr/tag/plateforme-iot)
- [Territoires connectés (4)](https://blog.kuzzle.io/fr/tag/territoires-connectés)

### Derniers posts

### Inscription

Veuillez remplir le formulaire ci-dessous pour vous abonner à notre blog

[Abonnez-vous à notre flux RSS](https://blog.kuzzle.io/fr/rss.xml)

[Tweets by kuzzleio](https://twitter.com/kuzzleio?ref_src=twsrc%5Etfw)

[PRODUITS](https://kuzzle.io/fr/) [![DEMANDER UNE DEMO IOT](https://no-cache.hubspot.com/cta/default/3803374/b06c7be7-0b3d-47ed-bcbc-9d9ac5b63b77.png)](https://kuzzle.io/fr/kuzzle-iot-plateforme-open-source/demo-kuzzke-iot/?hsCtaTracking=b71c079c-26bb-4aa4-ab8d-09e9d93d52e5%7C7456984a-b366-4fec-b69c-57feff222eb5)

PRODUITS KUZZLE

[Kuzzle Backend](https://kuzzle.io/fr/kuzzle-backend/)

[Kuzzle IoT](https://kuzzle.io/fr/kuzzle-iot-plateforme-open-source/)

FONCTIONNALITES PRETES A L'EMPLOI

[Securite & Authentification des utilisateurs](https://kuzzle.io/fr/kuzzle-backend/)

[Base de données en temps réel](https://kuzzle.io/fr/kuzzle-backend/)

[Geolocalisation en temps réel](https://kuzzle.io/fr/kuzzle-backend/)

[Moteur Pub/Sub en temps réel](https://kuzzle.io/fr/kuzzle-backend/)

[Kuzzle Admin Console](https://kuzzle.io/fr/kuzzle-backend/)

[Installable On Premise & Cloud Agnostic](https://kuzzle.io/fr/kuzzle-backend/)

[CAS CLIENTS](https://kuzzle.io/fr/cas-clients/)

[Smart Cities](https://kuzzle.io/fr/cas-clients/)

[Smart Building](https://kuzzle.io/fr/cas-clients/)

[Smart Industrie](https://kuzzle.io/fr/cas-clients/)

[Smart Logistique](https://kuzzle.io/fr/cas-clients/)

[TARIFS](https://kuzzle.io/fr/tarifs/)

[Nos tarifs](https://kuzzle.io/fr/tarifs/)

[DÉVELOPPEURS](https://docs.kuzzle.io) [![Télécharger Kuzzle](https://no-cache.hubspot.com/cta/default/3803374/9230fbb8-1602-40d6-b5e9-7395705251de.png)](https://cta-redirect.hubspot.com/cta/redirect/3803374/9230fbb8-1602-40d6-b5e9-7395705251de)

GUIDES

[Getting Started](https://docs.kuzzle.io/guide/getting-started)

[Essentials](https://docs.kuzzle.io/guide/essentials)

[Kuzzle in Depth](https://docs.kuzzle.io/guide/kuzzle-depth)

DOCUMENTATION

[SDK Reference](https://docs.kuzzle.io/sdk-reference/kuzzle)

[Koncorde](https://docs.kuzzle.io/core/1/guides/cookbooks/realtime-api/introduction/)

[API Documentation](https://docs.kuzzle.io/core/1/api/essentials/connecting-to-kuzzle/)

[Plugin Reference](https://docs.kuzzle.io/plugins/1/essentials/getting-started/)

[Elasticsearch Cookbook](https://docs.kuzzle.io/guide/1/elasticsearch/introduction/)

COMMUNAUTÉ

[Github](https://github.com/kuzzleio/kuzzle)

[Discord](https://discord.gg/tAEtyDZ)

[ENTREPRISE](https://kuzzle.io/company/) [![Inscription à notre newsletter](https://no-cache.hubspot.com/cta/default/3803374/63a23e8f-3fe5-476a-bb0e-b6f94bd3ac7a.png)](https://kuzzle.io/fr/newsletter/)

À PROPOS

[Qui sommes-nous](https://kuzzle.io/fr/qui-sommes-nous/)

[Rejoignez l'équipe](https://kuzzle.io/fr/qui-sommes-nous/recrutement/)

[Méthodes de travail](https://kuzzle.io/fr/company/methodes-de-travail/)

[Presse](https://kuzzle.io/fr/qui-sommes-nous/espace-presse/)

[Partenaires](https://kuzzle.io/fr/qui-sommes-nous/espace-partenaire/)

[Nous contacter](https://kuzzle.io/fr/nous-contacter/)

SUIVEZ-NOUS

[Twitter](https://twitter.com/kuzzleio)

[Facebook](https://www.facebook.com/kuzzleio)

[Github](https://github.com/kuzzleio)

[Linkedin](https://www.linkedin.com/company/kuzzle/)

[Youtube](https://www.youtube.com/channel/UCHcEzVQoH10YSyxc7jD3SMw)

- [Politique de confidentialité](https://kuzzle.io/privacy-policy)

©2021 KUZZLE - Tous droits réservés