APE - Ajax Push Engine
Ajax Push Engine ou APE (un singe ... comme c'est mimi) c'est une solution complète de développement Comet. J'invente rien c'est écrit. Mais ça veut dire quoi et surtout à quoi ça sert ?

Comet c'est quoi ? Je vous invite a lire l'article wikipedia a ce sujet, mais basiquement c'est une méthode pour établir un lien continu et immédiat entre le serveur et le client ( et pas l'inverse ).
Le principe est simple: on ouvre une connexion AJAX qui ne se termine jamais, du coup dès que le serveur a un truc a dire il utilise cette connexion. Elle se réouvre automatiquement derrière. Ca marche dans les deux sens du coup ...
La ou c'est pas évident de s'arrêter de faire chauffer le cerveau c'est quand on se dit : mais jusque la je vivait bien sans, je sais pas pourquoi mais jsuis sur que ça pourrait me servir a quelque chose mais a quoi ?
Les exemples les plus basiques sont une shoutbox, un chat ... Mais ça peut être utilisé dans un jeu a plusieurs, comme serveur d'event lié avec un mysql, comme proxy, comme watchdog, comme nagios temps réel jsuis sur que branché a un four ça doit être génial pour savoir quand c'est cuit !!!
Bref pas de limites autre que vous même, lui se charge de la communication entre tous les trucs qui s'y connectent.
Par défaut ça marche sur un principe de "pipe" a travers lequel on passe des "message" soit connecté a un "channel" soit directement a un autre "user". Quand on envoi sur un "channel" ça broadcast a tous les users connecté, quand on se connecte a un channel non existant ça le cré. Les messages sont de types "raw" (ceux qu'on reçoit), ou "command" (ceux qu'on envoi). Bref dans un premier temps c'est hyper basique mais on peux développer des plugins serveurs qui étendent ce dernier pour en faire ce qu'on veut.
Les plugins côté serveurs sont fait en JavaScript ... rien que ça oui mossieur ! Et c'est interprété avec SpiderMonkey (l'interpréteur javascript de mozilla)
Donc bon on blablate mais ... on joue ou quoi ?
On download le package sur leur site : ape-project.org/download
Dans ce package il y a deux choses : le JSF (je déteste ce nom) pour JavaScript Framework et le ape-server compilé dans toute les distrib linux du monde, pour osx, montre casio, calculatrice HP48G tout quoi ! Le truc est tellement light qu'ils ont pas fait dans la dentelle !
Pour simplifier j'ai tous mis dans un même folder, j'ai rajouté à mon vhost :
127.0.0.1 mytld.com www.mytld.com 127.0.0.1 ape.mytld.com 0.ape.mytld.com 1.ape.mytld.com 2.ape.mytld.com 3.ape.mytld.com 4.ape.mytld.com 127.0.0.1 5.ape.mytld.com 6.ape.mytld.com 7.ape.mytld.com 8.ape.mytld.com 9.ape.mytld.com
Puis un petit vhost qui va bien :
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin pitilezard@gmail.com DocumentRoot /path/to/mytld ServerName www.mytld.com ServerAlias mytld.com ServerAlias ape.mytld.com ServerAlias *.ape.mytld.com <Directory /path/to/mytld/> Options FollowSymLinks AllowOverride All Allow from all </Directory> </VirtualHost>
Ensuite il y a un fichier de config pour le serveur mais bon ... y'a trop rien a toucher dedans pour le moment. Par contre dans ape-jsf/Demos/config.js il faut changer des trucs :
APE.Config.baseUrl = 'http://mytld.com/ape-jsf'; //APE JSF APE.Config.domain = 'mytld.com'; APE.Config.server = 'ape.mytld.com:6969'; //APE server URL
Pour tester si ça marche :
* on lance le serveur : cd /path/to/mytld/APE_binary/bin/ && ./aped
* on accède à: http://mytld.com/ape-jsf/Tools/Check/ (j'ai déjà dis que je déteste ce nom ?)
Et on click sur Launch test !
Si tout est ok (ce qui est le cas chez moi) vous pouvez commencer a tester la shoutbox ou le chat par exemple :
* http://mytld.com/ape-jsf/Demos/Shoutbox/demo.html
* http://mytld.com/ape-jsf/Demos/Chat/demo.html
Et regarder comment ça marche derrière ... Plutot simplement pour tout vous dire, c'est pas mal orchestré !
Donc pour ceux qui comme moi se sont dis "Oooooh noooon c'est naz mootools" ne vous inquiétez pas ! Les types aiment mootols, mais ils ont pensé tout leur truc de façon "framework-agnostic" si bien que autant le serveur que le client peuvent utiliser leurs propres framework.
Je vais faire tout avec jQuery donc je re-posterai pour montrer les adaptations !
