La croissance de la richesse fonctionnelle de nos framework web s’est malheureusement accompagnée
d’une surcharge croissante côté code et côté serveur.
Si les frameworks d’aujourd’hui (Grails, Spring, etc) sont des gloutons en terme de mémoire, cpu, et espace disque, c’est en théorie pour la bonne cause, c’est à dire pour embarquer les constructions techniques qui amèneront les bonnes pratiques, les mécanismes métiers clés (transaction, injection, découpage en couche etc) et la qualité de fonctionnement. Toutefois c’est parfois très frustrant d’embarquer toute cette lourdeur pour le déploiement d’applications simplistes. Ce n’est pas pour autant qu’il faille envisager le pire sur ces cas d’usages, c’est à dire le retour aux années 2000 (jsp, servlet)…
Voici venu le temps des framework web évènementiels basés sur cette volonté de simplicité. On peut même dans certains cas parler de langages et même de Domain Specific langage tant la spécialisation peut être marquée. Voici quelques exemples.
NODE.JS
Node.js est le cas typique du framework évenmentiel. Le langage de développement est javascript, l’environnement d’exécution V8 (google javascript engine v8) dont la particularité est de compiler le javascript en code machine. La simplicité est au rendez vous.
Lancer un serveur web :
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello Worldn');
}).listen(8000);
console.log('Server running at http://127.0.0.1:8000/');
Un autre exemple typique consiste dans l’implémentation d’un serveur socket.
Plus d’infos : http://nodejs.org/
Une refcard est disponible chez dzone, et elle insiste à bon escient sur l’asynchronisme.
Sinatra
Sinatra est nouvelle bonne surprise du monde ruby (toujours en avance, rappelez vous ROR).
Un framework web évènementiel profondément simple dans l’usage. Dommage par contre, vous ne pourrez pas l’utiliser sur les serveurs mutualités proposant ruby, car une installation de module est nécessaire.
Le framework est uniquement orienté web mais est par contre très complet (cf doc).
Le hello world web est SIMPLE :
require 'sinatra'
get '/' do
'Hello world!'
end
http://www.sinatrarb.com/
Spark
Enfin le meilleur pour la fin et le dernier né : Spark.
Enfin un petit framework évènementiel créé en java et inspiré de Sinatra.
Qui dit java dit pourquoi pas Groovy, alors à vos claviers.
Le hello world reste simple :
import static spark.Spark.*;
import spark.*;
public class HelloWorld {
public static void main(String[] args) {
get(new Route(« /hello ») {
@Override
public Object handle(Request request, Response response) {
return « Hello World! »;
}
});
Pour finir
Ces frameworks évènementiels n’utilisent pas de système de pool de thread-worker (comme le font nos serveurs d’applications), mais des systèmes de pile (cf doc sinatra ou node.js). Le système de pile + la désynchro de la requête et de la réponse permet en théorie d’attendre des sommets en terme de capactité de réponse (cf doc node.js). A vérifier… et dans quelle mesure…
Crédits photo : Spark