Comment suivre le nombre de clients avec Indy TIdTCPServer
Je veux savoir le nombre actuel de connexions client à un Indy 9 TIdTCPServer (sur Delphi 2007)
Je n'arrive pas à trouver une propriété qui donne à ce.
J'ai essayé d'incrémenter/décrémenter un compteur sur le serveur le logiciel OnConnect/OnDisconnect des événements, mais le nombre ne semble jamais à décrémenter lorsqu'un client se déconnecte.
Des suggestions?
S'avère que mon logiciel onconnect/méthode de déconnexion a le droit de travailler, mais en raison d'un bug dans mon serveurs, ils n'ont pas de sortie correctement. Doh.
OriginalL'auteur Roddy | 2011-04-01
Vous devez vous connecter pour publier un commentaire.
Actifs des clients sont stockées dans le serveur de
Threads
de la propriété, qui est uneTThreadList
. Verrouillez simplement la liste, à lire sesCount
bien, et puis déverrouiller la liste:En Indy 10, le
Threads
propriété a été remplacé par leContexts
propriété:Merci Remy, c'est ce que je recherchais. Je n'avais pas compris comment faire pour obtenir l'TList de TThreadList avant.
le
Threads
/Contexts
liste contient actuellement actif (c'est à dire connecté à des clients) threads/contextes seulement. Le groupement est géré en dehors de TIdTCPServer complètement (il est géré par la mise en œuvre deTIdThreadMgrPool
/TIdSchedulerOfThreadPool
), afin de threads inactifs/contextes dans la piscine ne contribuent pas à laCount
.ok c'est bon à savoir. Merci pour la clarification
OriginalL'auteur Remy Lebeau
Ne sais pas pourquoi en utilisant le logiciel OnConnect et OnDisconnect ne fonctionnent pas pour vous, mais ce que nous avons fait est de créer un descendant de TIdCustomTCPServer; afin de remplacer son DoConnect et DoDisconnect méthodes et de créer et d'utiliser notre propre descendant de TIdServerContext (un thread descendant qui va "servir" une connexion).
Vous faire la TIdCustomTCPServer conscient de votre propre TIdServerContext classe par:
(Modifier Ajouté conditionnelle définit, pour montrer comment faire le travail pour Indy9)
Dans le DoConnect remplacement de notre TIdCustomTCPServer descendant nous avons mis l'ConnectionID de notre classe de contexte à une valeur unique:
Notre DoDisconnect remplacer efface le ConnectionID:
Maintenant, il est possible d'obtenir un nombre de connexions en cours à tout moment:
OriginalL'auteur Marjan Venema
Comment incrémenter /décrémenter un compteur de
OnExecute
(ouDoExecute
si vous remplacer)? Que ne pouvez pas vous tromper!Si vous utilisez
InterlockedIncrement
etInterlockedDecrement
vous n'avez même pas besoin d'une section critique pour protéger le compteur.OriginalL'auteur Cosmin Prund
Cela doit fonctionner sur Indy 9, mais il est assez obsolètes de nos jours, et peut-être quelque chose est cassé dans votre version, essayez de mettre à jour vers la dernière Indy 9 disponible.
J'ai fait un test simple à l'aide d'Indy 10, qui fonctionne très bien avec un simple contrefil Incrémenter/Décrémenter dans le logiciel OnConnect/OnDisconnect des gestionnaires d'événements. C'est mon code:
ensuite, l'ouverture d'un couple de clients avec telnet:
ensuite, la fermeture d'un client
.
INDY 10 est disponible pour Delphi 2007, mon principal conseiller est de la mise à niveau de toute façon.
OriginalL'auteur jachguate