Vert.x
Présentation
Qu'est-ce que Vert.x ?
![]() Tim Fox, le créateur de Vert.x |
Une application de type "event driven" est principalement définie par ses réactions aux différents événements qui peuvent se produire, c'est-à-dire des changements d'état de variable comparé au séquentielle qui suit le déroulement des instructions du programme. Comme Node.js, Vert.x permet aux développeurs de créer des applications webs évolutives dans le sens qu'ils peuvent créer des serveurs webs performants et en multi-langages (polyglotte) Vert.x est basé sur la machine virtuelle Java (JVM) alors que Node.JS est utilisé sur la machine virtuelle du moteur Javascript (V8). Vert.x a été crée en 2011 alors que Tim Fox travaillait pour VMWare, il a quitté la société en 2012 puis a rejoint RedHat. En Janvier 2013, il a été décidé que le projet du framework Vert.x rejoindrait la fondation Eclipse. |
Philosophie de Vert.x
Voici la propre philosophie que vise Tim Fox, selon lui, son outil n'est pas qu'un simple framework, son objectif est que celui-ci soit une plateforme.
Il a l'avantage d'être léger, simple et polyglotte. Voici les principaux mots-clés décrivant Vert.x :
- Vert.x peut être utilisé par des développeurs qui utilisent un langage différent, en effet il est supporté sur les langages de programmation suivants :
- Java, Groovy, Ruby, Python, Javascript, CoffeeScript, Clojure, Scala

Exemple de code des différents langages de programmation - Polyglotte
- Vert.x utilise des API existantes, non-bloquantes et performantes, il peut être donc intégré dans vos applications existantes.
- Vert.x utilise des mobules proposant des fonctionnalités variées, cette partie est expliquée en détails dans la partie "Modules".
- Vert.x propose une autre approche concurrente, cette partie est expliquée en détails dans l'approche différente de Vert.x.
- Vert.x est actuellement disponible gratuitement sous licence Apache 2 sur GitHub avec des exemples de code : Voici le lien.
En résumé, nous sommes tous des développeurs polyglottes. Nous nous disons que nous sommes conscients qu’il y a des langages meilleurs que d’autres pour des problématiques différentes, exemple : ça va être plus simple en Python.
Vert.x fonctionne sur la JVM, elle va ainsi utiliser les capacités de celle-ci et peut comprendre du Ruby ou du Python. On peut développeur ces langages dans Vert.x.
Tim Fox veut que son framework rassemble ces différentes communautés. Nous verrons qu'ils peuvent discuter les uns avec les autres via des events bus (voir la partie Event Bus)
Vert.x : Une approche différente
- Différent de la gestion du multithreading et de la concurrence
- Éviter les problèmes des threads
De manière générale, ce qu’on appelle le développement asynchrone est un peu différent de la gestion du multithreading et de la concurrence que l’on trouve dans les langages comme le Java, C, C#, etc.
Dans le modèle “classique”, vous créez vos threads vous-même et devez gérer plusieurs éléments pour éviter les problèmes au niveau du partage de mémoire, dans le cas où les données sont utilisées par plusieurs threads.
Pour résoudre ces problèmes, il faut mettre en place des mécanismes de synchronisation, de mutex, de lock, etc. Ces mécanismes sont en général assez coûteux en mémoire et il est recommandé de les éviter au maximum.
- Définir des entités pour des traitements indépendants
- Isolation du code / échange des informations entre entités
Une autre manière de voir les choses est de définir des entités dont les traitements sont indépendants les uns des autres et dont le code est isolé. Comme le code est isolé, il n’y a pas de partage de mémoire entre les threads et vous pouvez créer un thread par entité.
Si vous avez besoin d’échanger des informations entre ces entités ou de déclencher un traitement, vous utilisez un système de messages ou d’évènements selon les besoins.
Le patron de conception Reactor permet de traiter de façon évènementiel dans un environnement concurrentiel, les évènements peuvent provenir de différentes sources diverses. Il ressemble fortement au design pattern Observateur, mais à la différence de celui-ci, il est capable d'accepter plusieurs sources d'événements.
Sous le capot de Vert.x
![]() Netty |
|
![]() Hazelcast |
|
![]() Jackson |
|
...et d'autres couches permettant l'utilisation d'autres langages |
Exemple : Un développeur Ruby code à la façon Ruby…
|
- Clients & serveurs TCP/SSL
- Clients & serveurs HTTP/HTTPS
- Clients & serveurs WebSockets
- Gestion des évènements via le bus d’évènement
- Actions planifiés via timer
- Buffers
- Flow control
- Accès au système de fichier
- Map et Set partagés
- Logging
- SockJS
Avec ce qu'offre Vert.x comme API, il intègre la connexion réseau étendue avec des serveurs TCP, HTTP/HTTPS et les clients, le support pour WebSockets et SockJS, etc.