2008-12-16 7 views
-1

J'ai plus de 50 clients connectés à un serveur (serveur bas de gamme, exécutant Windows Server 2003), chaque fois qu'il ya une panne de courant ou défaillance du commutateur les clients se déconnecter du serveur, le serveur peut rester au cours de cette incident (si la sauvegarde de l'alimentation est installée), lorsque les clients reviennent, ils détectent automatiquement le serveur et lancent une procédure de connexion. À ce stade, le serveur commence à distribuer les données pertinentes aux clients. C'est à ce stade que vous vous rendez compte que certains clients vont commencer à se geler parce que le serveur n'est pas assez rapide pour diffuser des données et donc il bloque le reste des clients.Quel est le meilleur algorithme/technique pour contrôler les connexions client au serveur?

J'ai mis en place une méthode brute pour contrôler cette tempête client, mais je me demande si les gars là-bas ont de meilleurs algorithmes pour effectuer ce genre de tâche.

NB: Am en utilisant des composants sockets Asta sur une application delphi, mais je ne exemples d'esprit de différents domaines,

Répondre

1

similaires à des protocoles réseau de détection de collision, peut-être des clients pourrait attendre une période de temps aléatoire avant de lancer leur connexion au démarrage?

0

En plus du retard de démarrage aléatoire proposé par Brême, mettre en œuvre une sorte de « trop occupé, réessayer plus tard » message dans votre protocole. Rejeter un client avec un message court ne devrait pas poser de problème pour 50, 100 ou même 1000 clients. Demandez aux clients de répondre en effectuant un délai aléatoire et en réessayant + une interruption exponentielle.

+0

Je vous ferais normalement +1 pour une suggestion sensible, mais il dit qu'il utilise Win2k3. Je sais de tous les jours d'expérience de travail qu'une boîte win2k3 (même haut de la ligne) ne peut pas gérer plus de 500 clients pour rien de plus que des pages vues statiques. Aucune raison de penser que son application fonctionne mieux. – rmeador

+0

Un message de rejet rapide devrait être plus simple qu'une page statique. – derobert

0

La solution dépend de vos préférences aussi. Est-ce que vous pouvez laisser tomber la demande de connexion ou envoyer un message occupé? Une autre option peut être que vous commenciez à envoyer des données aux clients de la manière d'un roundrobin. À cette fin, vous pouvez avoir différents threads responsables de l'envoi de données à différents clients. L'avantage de ce cas peut être qu'aucun des clients sera affamé.

Questions connexes