Er det muligt at holde 3-400 tcp sockets åbne samtidig?
Jeg har gennem længere tid arbejdet på et program der skal overvåge en række irc kanaler til statistiske formål.
Jeg har forsøgt at kode programmet adskillige gange i både Java og senest C#. Hver gang er problemet at de 3-400 åbne sockets jeg har brug for får computeren til at lagge helt vildt.
Min fremgangsmåde er at oprette en instans af en threaded IrcClient klasse for hver connection og så hæfte en række events på hver IrcClient. Det fungerer fint med 50-100 sockets men så stopper festen også.
Er der en bedre måde at opretholde så mange åbne sockets på - og i så fald hvordan? Eller er det nærmere windows end min egen kode, der sætter en stopper for det?
Det kræver faktisk en pæn hurtig server at håndtere så mange tråde/clients.
Threading er en meget pæn programmerings model. Men meget krævende til rigtigt mange.
Du kan vælge at omkode det til kun at have et mindre antal tråde f.eks. 25 og så lade hver tråd servicere flere sockets.
Det kræver en masse kode. Og support for non blocking sockets.
I Java skal du bruge den nye java.nio pakke for at kunne gøre det. Eller du kan vælge den meget nemme løsning og skifte fra SUN JVM til BEA's JRockit JVM, som gør at du kan have mange Java threads serviceret af færre OS threads uden at du skal ændre en linie kode (det skulel virke fint til langt over 1000 tråde !).
I C# skal du omskrive koden. Jeg mener at non blocking sockets hedder asynchroneous sockets i .NET, men jeg har aldrig arbejdet med dem.
Har desværre haft lidt travlt med andre ting, men er da kommet så langt at jeg kan se det kan komme til at virke.
Dog er computeren stadig ikke glad for de mange sockets og mit program skal gerne kunne køre hele døgnet samtidig med jeg bruger den til andre formål, så jeg har tænkt mig at se på muligheden for at distribuere det ud på flere computere.
Jeg holder mig til .net versionen nu eftersom jeg gerne vil blive lidt klogere på det område. Mange tak for hjælpen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.