Avatar billede rexx0r Nybegynder
06. august 2004 - 13:56 Der er 9 kommentarer

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?

På forhånd tak for hjælpen!

/Jacob
Avatar billede arne_v Ekspert
06. august 2004 - 15:09 #1
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.
Avatar billede rexx0r Nybegynder
06. august 2004 - 15:59 #2
tak for rådet! jeg læser mig lidt klogere på .net threading.
Avatar billede dna Nybegynder
06. august 2004 - 16:20 #3
Dette er måske ikke helt hvad du leder efter, men har du overvejet bare at arbejde med logfilerne fra en IRC-klient?

dna
Avatar billede rexx0r Nybegynder
07. august 2004 - 12:35 #4
dna, ja men det skal være realtime. ellers tak!
Avatar billede arne_v Ekspert
10. august 2004 - 22:04 #5
Kommet videre ?
Avatar billede rexx0r Nybegynder
11. august 2004 - 11:03 #6
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.
Avatar billede arne_v Ekspert
20. august 2004 - 19:35 #7
Tid at få afsluttet spørgsmålet ?
Avatar billede arne_v Ekspert
20. august 2004 - 19:36 #8
Og et svar såfremt nogle af mine kommentarer har været nyttige
Avatar billede arne_v Ekspert
11. september 2004 - 22:03 #9
Lukke tid ?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester