> interogez pe toate odata... lucru care se pare ca nu este totusi ok... > > Daca aveti alte idei sunt deschis...
Am facut pentru un client un soft asemanator, in C (e destul de complex, fiecare IP poate fi monitorizat prin mai multe metode, care sunt pluginuri etc). Solutia adoptata de mine, care cu putin tweak a mers foarte bine: 1. citesti lista din baza de date 2. creezi threaduri pt. fiecare ping (NU am apelat ping extern, am facut propriile functii de ping bazate pe libnet si socket raw listen in epoll mode), dar care sa nu depaseasca 1000 threaduri simultan (ar putea depasii, dar este problema cu spatiul de adresare a memoriei alocat catre proces. Si 1000 e EXTREM de mult, daca lasi parametrii thread-ului asa cum ii pune sistemul de operare). 3. fiecare thread trimite ping-ul si se inchide 4. in loop-ul principal (care creaza threadurile) astept cu epoll dupa packete, calculez timpii, creez o lista de reply in memorie. Astept dupa un sequence maxim timpul de timeout. Toata chestia ia ca timp f. putin, pt. 2500 hosturi. Eu am proiectat aplicatia sa faca toata chestia asta in maxim 3 minute la 60.000 hosturi. Rezultatele le scriam apoi in baza de date, la fiecare 5 minute. Deci, pe baza de date aveam un query si apoi write-uri pt. fiecare host, daca era cazul, la fiecare 5 minute. Si asta pe o singura conexiune :) Jucarila lucreaza like a charm. Nu stiu daca e pusa inca in productie, nu am mai tinut legatura cu acel client, din diverse motive. -- Claudiu Nicolaie CISMARU GNU GPG Key: http://claudiu.targujiu.net/key.gpg T: 0755135455 E: [EMAIL PROTECTED], [EMAIL PROTECTED]
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ RLUG mailing list RLUG@lists.lug.ro http://lists.lug.ro/mailman/listinfo/rlug