Amethyst
Table des matières
Introduction
Caractéristiques générales
Configuration requise
Caractéristiques techniques
Architecture logicielle
Planning
Liens
Copies d'écran
Amethyst est un client Gnutella écrit en langage Java, en cours de développement. Il a pour
ambition d'égaler à terme les meilleurs clients Gnutella actuels, puis de
mettre en oeuvre un nouveau type d'applications basé sur le réseau Gnutella,
à l'horizon 2006.
Le développement de ce produit a également pour but de démontrer mon
savoir-faire en matière de développement Java (je travaille en tant que travailleur indépendant,
voir page d'accueil).
La version 0.63 est actuellement en bêta test, mais, bien que le produit
soit d'ores et déjà totalement fonctionnel, la première
version officielle ne sera pas diffusée prochainement. Je pensais initialement diffuser ce
programme à partir de la version 0.65, mais j'ai décidé récemment de
reporter la diffusion officielle à la version 0.8 (voir planning).
- Multiples requêtes simultanées.
- Téléchargements descendants (Downloads) et montants (Uploads).
- Exploration des hôtes distants (Browse Host).
- Sauvegarde et redémarrage automatique des téléchargements
incomplets.
- Fonctions évoluées de partage des fichiers (gestion des partages) : drag
and drop, maintenance (ajout, suppression de répertoires et sous-répertoires
partagés).
- Interface graphique configurable (niveau expert).
- Fonctionnalités pour les experts et développeurs Gnutella : nombreuses possibilités
de log pour l'aide au développement d'outils Gnutella (clients, routeurs,
...).
- Statistiques diverses.
- Affichage graphique de l'état de la connexion au réseau Gnutella.
- Affichage des résultats signalant les fichiers théoriquement inatteignables
(cas de deux clients situés chacun derrière un pare-feu). Possibilité
de forcer la tentative de téléchargement.
Etant développé 100% en Java, Amethyst peut supporter de nombreux systèmes
d'exploitation. Il est développé et testé sous Windows XP et 2000, et Linux (Mandrake).
Il devrait fonctionner sans problème sur tout système d'exploitation de type
Unix/Linux ou Windows (en évitant win95 et 98, qui ne seront vraisemblablement
plus supportés à partir de la version 1.0), ainsi que Mac OS X.
Amethyst est une application sophistiquée qui nécessite une configuration
informatique puissante. De plus, l'application n'est pas encore optimisée
(conformément au schéma de conception Extreme-Programming, voir liens en bas
de la page).
Configuration Minimale : CPU 800 MHz, 256 Mo RAM (base PC)
Configuration recommandée : CPU 1,5 GHz, 512 Mo RAM (base PC)
- Handshake v0.6
- Standard 0.4 gnutella specs (structure et routage des messages Gnutella)
- Pong-Caching v0.1
- GWebCache (GWC)
- Flow Control (type SACHRIFC)
- HTTP downloads and uploads (w/ partial ranges)
- HTTP/1.1 persistent connections
- HUGE v0.94 (implémenté à 85%)
- GGEP (implémenté à 50%)
- Browse Host
- Bye messages (implémenté à 70%)
Autres caractéristiques :
- Hosts List (en complément du protocole GWC, facilite la connexion au
réseau Gnutella).
- Push messages "broadcastés" (augmente la probabilité de
télécharger un fichier trouvé lorsque l'hôte de ce fichier est derrière un
firewall).
- Détection des messages dupliqués, correction ou élimination des messages
abusifs (longueur, TTL -- Time To Live -- excessif, ...)
- Serveur HTTP (permet de naviguer dans l'arborescence des partages et de
télécharger des fichiers en utilisant un navigateur web).
Amethyst est bâti sur une architecture comportant trois couches logicielles
distinctes :
- Noyau applicatif : Amethyst repose sur Appkernel, qui est un noyau
applicatif Java générique (actuellement en phase de développement
alpha). Cela signifie que cette couche est totalement indépendante du protocole
Gnutella et permet de développer n'importe quel type d'application java (de
type "standalone", mais aussi de type serveur, au moyen d'un
module optionnel embarquant le container de servlets Tomcat). Une page spécifique sera consacrée au projet
Appkernel prochainement. En attendant, voici quelques informations
sur ce projet :
- Architecture inspirée des serveurs d'application web
- Chargement des composants par un mécanisme de type IOC (Inversion Of
Control), de type 2, utilisant un
fournisseur de services JNDI pour les systèmes de fichiers (file system service
provider) propriétaire. Appkernel fournit donc un espace de nommage virtuel
pour les composants. Les composants sont chargés puis initialisés automatiquement
en fonction des dépendances (les dépendances cycliques sont détectées
et prises en charges automatiquement). Pour les cas complexes, il existe
des niveaux d'initialisation (run level, comparables au niveaux
d'initialisation utilisés par les systèmes d'exploitation de type Unix/Linux)
qui sont activés séquentiellement.
- Gestion de couches de configuration, gestion de propriétés globales
(exemple : niveau de log)
- AppKernel fournit également une API générique qui accélère grandement
le développement d'une application Java. Voici quelques
un des composants et services disponibles : Internationalisation ; système
de log événementiel comprenant plusieurs loggers génériques et permettant
de filtrer et répartir les événements en fonction de leur niveau de sévérité
; composants graphiques -- swing -- évolués (menus génériques, ...) ;
gestion dynamique de l'UI, dispatcher d'événements générique (utilisant
Java reflection) ; fabriques de composants ; pools de composants ; module
de préférences générique ; fichiers de propriétés améliorés, incluant notamment
la gestion de sections et la préservation de la structure du fichier.
- Couche métier : Il s'agit de l'API qui implémente le protocole Gnutella.
Cette couche logicielle est totalement indépendante de l'interface graphique
et communique par un modèle événementiel avec cette dernière. L'utilisation
de Appkernel facilite le développement d'applications totalement compartimentées
: la gestion dynamique des classpath génère des erreurs "Runtime"
(ClassNotFoundException) si la compartimentation (ascendante) n'est pas assurée,
garantissant ainsi totalement la séparation entre les couches logicielles.
- Interface graphique : l'API de Appkernel fournit également de nombreux
composants dérivés de swing. Les composants graphiques AppKernel utilisent
l'architecture MVC de façon plus systématique que swing. La couche graphique
de Amethyst utilise intensivement ces composants (vues et modèles). L'un des
objectifs à terme est de permettre l'implémentation dans Amethyst d'une interface
graphique totalement dynamique, c'est-à-dire que l'utilisateur pourra la reconfigurer
à sa guise en temps réel (utilisation d'un panneau de type desktop
et de fenêtres internes, panneaux à onglets, fenêtres isolées, ou encore interface
de type "liste de composants" -- exemple : explorateur de fichiers).
La totalité des composants graphiques contiennent des données mises à jour
en temps réel (rafraîchissement toutes les 2 secondes) sans utiliser le modèle
événementiel qui serait trop coûteux.
| Version |
Date |
News |
| 0.65 |
01/12/2004 |
Preferences
HTTP/1.1 persistent connections
Browse Hosts |
| 0.7 |
01/06/2005 |
Swarm Downloading
Internationalization
Installer |
| 0.8 |
09/2005 |
Query Routing Protocol (QRP)
Dynamic UI |
| 0.9 |
12/2005 |
Ultrapeers |
| 1.0 |
2006 |
Dynamic querying
High outdegree Ultrapeers |
| 1.2 |
2006 |
"TheSwarm" project |
RFC-Gnutella
Gnutella Developper Forum (the GDF)
Extreme Programming (XP)
Cliquer sur les images pour les voir en taille réelle.
Vue d'ensemble

Panneau de connexion
Informations de base

Informations étendues

Recherches

Téléchargements (downloads)
Informations de base

Informations étendues

Recherches et Téléchargements (downloads)

Partages

Partages et Téléchargements montants (uploads)
Informations de base

Informations étendues

Statistiques
Statistiques générales

Statistiques sur les messages

Statistiques sur le contrôle de flux (flow control)

Surveillance des messages
Fonctionnalités Appkernel
Fenêtre de log
Fenêtre d'observation dynamique des composants chargés dans l'espace des
noms de Appkernel
| Last update : 10/08/2004 |
Copyright (c) 2003-2004, Mathias Bollaert - Tous droits réservés. |