2009-02-16 8 views
0

Nous avons un service de traitement de chaînes (C++, utilise stdin/out pour in/output) qui a différentes mises en page, chaque mise en page fonctionne séparément (éventuellement sur des machines séparées), chaque mise en page prend le temps de charger, c'est pourquoi il doit continuer à courir après la première course.Implémentation du client - application masterserver/slaveserver java

Je dois implémenter un système avec client qui demandera au serveur maître de le connecter à un serveur esclave pertinent qui exécute réellement le service de mise en page pertinent. Le serveur esclave communiquera les données transmises par le client au service et, une fois terminé, sera disponible sur le serveur maître pour les autres clients.

La question est de savoir quelle est la meilleure façon de mettre en œuvre les serveurs? Dois-je garder une connexion ouverte entre l'esclave/maître jusqu'à ce que le processus soit terminé pour informer le maître que la connexion est terminée ou garder une sorte de var dans une fonction synchronisée pour vérifier cela?

Toutes les autres entrées importantes (ou d'autres conceptions) que j'ai oubliées sont également très bien accueillies, Thanx!

Répondre

0

En supposant que vous ne pouvez pas remplacer le contenu C++, voici comment je le ferais du haut de ma tête.

Je voudrais configurer un serveur maître. Ce serveur exécuterait un processus qui accepte les requêtes (probablement par HTTP, donc ce serait un service web) et je lui ferais lire la requête, analyser ce que c'est, puis appeler l'esclave correct. Fondamentalement, il agit comme un proxy. Une fois qu'il reçoit la réponse de l'esclave, il la renvoie à l'appelant. La simplicité ici signifie que si vous commencez à recevoir plus d'un type de requête, vous pouvez configurer des serveurs supplémentaires pour ces requêtes et les renvoyer à tour de rôle. Les esclaves sont des services Web qui ouvrent le programme C++ et transmettent l'entrée et récupèrent la sortie. C'est tout ce que ça ferait.

Je ne voudrais pas garder les connexions ouvertes (sauf entre l'esclave et le programme C++ basé sur votre description). Le simple fait d'utiliser une requête web pour ce genre de choses gardera la connexion entre le maître et l'esclave ouverte durant le processus, mais cela ne devrait pas poser de problème. De cette façon, vous n'avez pas besoin de vous soucier de ce détail.

Maintenant si j'étais vous je serais sérieusement regarder réimplémenter le code C++ dans Java ou l'appeler via JNI ou quelque chose. Si vous pouvez l'éviter, je pense qu'éviter le wrapper Java autour de C++ serait un bon objectif de conception. Le Java peut faire n'importe quel processus coûteux au démarrage, puis garder les choses prêtes en mémoire comme le fait le code C++.

J'espère que cela aide.

0

En fonction de vos besoins d'évolutivité, vous pouvez jeter un oeil à la Java NIO package. Cela vous donnera un point de départ pour construire une implémentation de serveur évolutive et non bloquante.

Questions connexes