2013-10-13 2 views
1

Pour une tâche de collège, je construis une application Java en réseau à l'aide de sockets *. Mon architecture doit être évolutive et j'aimerais disposer de plusieurs serveurs pour communiquer avec mes clients.Utilisation de plusieurs serveurs en Java

Ma question est, comment un client peut-il connaître tous les serveurs disponibles? Ma première idée est que les clients conservent une liste (codée en dur) des adresses IP du serveur et choisissent dans la liste. Quelle est la meilleure pratique dans ce cas?

* Nous ne pouvons pas utiliser RMI.

+0

On dirait que vous voulez implémenter votre propre [cluster] (http://en.wikipedia.org/wiki/Cluster_ (computing)). –

+0

Vous pourriez être à la recherche de choses JNDI et RMI. Lire JNDI http://stackoverflow.com/questions/1350816/what-is-the-purpose-of-jndi – UDPLover

Répondre

0

Imaginons que les coûts de votre fournisseur de réseau soient trop élevés et vous avez décidé de changer de fournisseur. Boom va vos adresses IP. Je suggérerais l'utilisation judicieuse du DNS, en particulier le DNS à tour de rôle. L'utilisation d'un outil de suivi central peut sembler une bonne idée, mais elle doit elle-même être évolutive, semblable à Google App Engine, ou deviendra un point d'écoute.

Créez simplement plusieurs enregistrements A pour un nom donné, et vos clients en sélectionneront un au hasard lors de la résolution.

Si vous ne parvenez pas à utiliser le DNS, une liste IP peut être bénéfique - avec une modification. Tous les serveurs font circuler des copies mises à jour de la liste et si un serveur ne peut pas être atteint, un autre est essayé jusqu'à ce qu'une connexion soit faite (et la liste également mise à jour). Lorsque la liste diffère de la liste existante, la liste du client est mise à jour.

0

Vous pouvez utiliser des fichiers RMI pour créer des serveurs primaires et secondaires.

Le serveur secondaire peut émettre des appels primaires en continu, lorsque le serveur principal tombe en panne, le serveur secondaire peut s'enregistrer sur les services de noms à prendre en charge. Quand le primaire reviendra, il se reconnectera en faisant descendre le secondaire ... comme ça. En ce qui concerne le serveur client à connaître, le client peut demander des identités à des serveurs utilisant RMI.

+0

Désolé, je devrais avoir mentionné que nous ne pouvons pas utiliser RMI pour ce projet , c'est en partie un exercice de programmation de socket. –

Questions connexes