Dans la mesure ou tu veux faire un test de r�ponse
tu envoie une requete GET, et t'attend sagement la r�ponse du serveur. S'il est pa d'accord ou s'il est d'accord tu recevra une r�ponse
HTTP/1.1 200 OK
ou un truc dans le genre, donc tu peux tr�s bien utiliser HttpRequest.
Si tu le fait avec les Sockets tu va devoir lire toi meme ce qui est r�cup�r� et le parser... pas top, enfin pas compliqu� non plus cela dit. et il faudra que tu g�re le timeout...
Pour la concurrence des 500 tests... les threads.
Le probl�me c'est que si tu fait ouvrir 500 threads au syst�me comme ca d'un coup... il va pas aimer et va prendre un peu de temps... donc utilise les threads de la pool de threads
ThreadPool a qui tu peux attribuer une t�che.
tu prend une file de nom/ip a tester et tu prend un simple objet (object) que tu instancie pour servir de monitor d'exclusion mutuelle.
dans un premier temps tu instancie la file et y met tous le noms � tester.
Puis tu lance 500 threads de pools avec tous la meme tache (meme d�l�gu� de callback).
chacun de ces threads se lock sur l'objet d'exclusion mutuel cr��.
(section lock (objet) { ... })
dans ce code lock� tu met l'acc�s � la file ou tu d�pile le premier �l�ment � tester.
ensuite en dehors du code locked (apr�s la fin du bloc lock{}) tu fait ton test par httprequest ou socket.
a la fin tu met le resultat dans une file... ou une stack de sortie que tu va locker aussi pour �viter que tout le monde n'�crive lise en meme temps dedans ca t'�vitera des d�convenues.
une fois fait, le d�l�gu� termine normallement et le thread est "libre" et retourne dans la pool a attendre une nouvelle t�che � accomplir.
avec un thread normal, le code ressemblerais � ca :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
private void Process()
{
string iHost;
bool iResult;
lock (m_LockQuery)
{
iHost = m_Queries.Pop();
}
/// Tes traitements sur l'host obtenu
lock (m_LockResult)
{
iHost = m_Result.Push(new KeyValuePair<string, bool>(iHost, iResult));
}
} |
ici tu remarquera que je met une association host, bool pour les r�sultats histoire de savoir qui est libre et qui ne l'est pas.
ton autre code qui essaie d'acc�der � m_Result pour d�piler les �l�ments qui s'y trouve et les traiter doit le faire dans un
lock(m_LockResult) { ... }
�galement sinon tu risque l� aussi de s�v�res d�convenues.
voila sur le principe c'est assez simple
Partager