Bonjour,
Je me lance dans un dev assez important et je commence par bien me renseigner avant de commencer. Je voulais vous faire partager l'état actuel de mes recherches et avoir votre avis. C'est mon premier projet java mais pas mon premier projet client/serveur et POO.
Le client web sera en FLASH et je m'oriente vers un serveur JAVA. Il y aura aussi d'autres interactions avec des services en JAVA.
L'objet de ce thread est de déterminer la technologie la plus optimisée pour gérer beaucoup de messages, beaucoup de clients et parfois des messages contenant du binaire (100ko-500ko environ). La simplicité de développement est importante (sinon ça ne serait pas dans le thread JAVA) mais la performance passe avant tout.
Les plateformes existantes pour la communication JAVA-FLASH :
- BlazeDS, GraniteDS > Passent par des conteneur de Servlet. Supportent mal les montées en charge (pas de NIO)
- WebORB, LiveCycle Data Server > Super mais hors de prix (10k€/an)
- Red5 > Il a l'air performant, à vérifier. Par contre il n'y a pas d'outils pour faciliter le dev, vérifier le fonctionnement du serveur...
- SmartFox > Concu pour les jeux vidéos mais vraiment intéressant (750€/ serveur une fois)
Il est aussi possible de créer l'application serveur en se basant sur un framework comme Netty qui a l'air pas mal.
Dans ce cas il faut choisir protocole pour les données envoyées (serialisation/deserialisation).
Les protocoles de messages :
- AMF > format de flash le parsing se fait en code natif sur le client et donc c'est bien performant, les messages sont compressés (7bits) mais cette compression peut avoir un impact négatif sur les blobs
- SWX > format natif des variables en flash (copie binaire de l'objet en ram) c'est ce qu'il y a de plus rapide coté client mais c'est pas le plus light en bande passante
- Hessian > n'a aucun gros avantages, mais aucun gros inconvéniants
- Serialisation JAVA > c'est plus léger coté CPU serveur mais plus lourd coté client (après tout on s'en fiche un peu)
- Google Protocol Buffers > Traitement un peu lourd coté client, léger en bande passante, le source existe en JAVA.
http://code.google.com/apis/protocol.../overview.html- JSON > Plus lourd que les protocoles binaires, surtout que je dois passer des données binaires (blobs)
- XML > j'en parle parce qu'il faut bien mais c'est déjà beaucoup trop
http://cornelcreanga.com/2009/07/jav...serialization/
Il y a un aspect que je n'aime pas dans tout ces protocoles c'est qu'ils passent le nom des variables dans chaque message. Cette information est redondante, on pourrait passer la définition de la classe une fois avec un ID, puis les données brutes par la suite avec le même identifiant (4 octets pour la classe/numéro de version suffiraient). En plus on n'a vraiment besoin d'avoir cette info que pour les services ouverts SOAP mais quand on maitrise le client et le serveur, cette information devient inutile. Il suffit de coder en dur les données pures et veiller à la cohérence des classes qui les utilisent à chaque bout.
Concernant le dev je pense que je vais développer les prototypes avec un outil gratuit (pour le dev) de type WebORB. Ca me permettra de gagner du temps. Une fois le produit finalisé je substituerai la couche de communication.
Qu'en pensez-vous ? Connaissez vous d'autres plateformes ou protocoles que je pourrais ajouter à ces listes ?
Partager