|
|
|
|
Bonjour,
Je développe beaucoup en Java et j'aimerais savoir s'il était possible d'utiliser le RMI pour développer une application de chat qui permettrait à plusieurs clients de communiquer ensemble.
Le protocole et le serveur ne me posent pas beaucoup de problèmes à part pour renvoyer un message au client.
Ex:
Toto envoie le message "Tata" à tout le monde. Le serveur récupère l'information via l'objet RMI qui est publié. Cependant comment je fais pour dire aux autres clients : "Hé ho! ya un nouveau message !" ??
J'ai juste besoin d'éclairage sur la question... j'ai déjà beaucoup questionné Google et je n'ai rien trouvé de convaincant.
Merci d'avance pour votre aide.
Reltak.
Configuration: Windows XP Firefox 3.0.10
Salut,
|
Pardon je pensais être clair mais maintenant que tu le dis c'est vrai que c'est un peu ambigu...
|
Vouich, bien plus clair à présent ;-)
|
Chaque client lance un serveur RMI (le rmiregistry, en fait) lorsqu'il démarre et reste donc en attente des appels du serveur. C'est exactement comme ton code côté serveur, sauf que cette fois-ci c'est du côté client. Tu dois avoir donc une classe qui fait un extend de (par exemple) UnicastRemoteObject, qui implémente une interface et cette interface (disons InterfaceA), interface qui extends à son tour Remote.
InterfaceA clientProxy = (InterfaceA) Naming.lookup("rmi://blablabla");
- ou bien tu fais ce Naming tout au début et tu gardes dans ta liste des objets Remote Dans le 2ème cas, il y aura un gain de perf (plus de Naming à faire), mais il sera contrebalancé par: 1. une gestion des erreurs (clients déconnectés) 2. une tite augmentation du trafic réseau pour la maintenance des connexions RMI (JAva le fait en background) ++ |
Là je commence à être perdu... =P ca remet en cause ce que j'avais compris de RMI...
|
Oui, pour ta description de ce qu'il y a à faire comme classes.
class ClassServ extends UnicastRemoteObject implements IntServ {
...
public void sendMessage(String message) throws RemoteException {
// traitement du message
...
// notification des abonnés (supposons que la liste sur le serveur garde des objets Remote)
// à entourer par des try .. catch etc.
for (IntClient subscriber: subscribersList) {
subscriber.notifyClient(message);
}
}
} Est-ce un peu plus clair à présent?
++ |