Avatar billede dank Nybegynder
29. april 2004 - 14:22 Der er 8 kommentarer og
1 løsning

socket server (f.eks. en der modtager logs)

Findes der en relativ simpel måde/tutrial/how to/eksempel på at lave en socket server der kan

1: lytte (*nix)
2: smide det der kommer ind ned i en fil

Og som.. kan følge med hvis der smides 1000-1200 linier ind til den i sekundet (syslog-ng). Serveren er Dual Xeon, god IO performance m.m.

Har forsøgt at lave en i Perl (via POE) men den taber data linier, når den belastes meget. Mon ikke der findes en metode til at lave en eller anden form for handshake/checksum eller lignende.

Nogen idéer til hvor jeg skal starte?
Avatar billede arne_v Ekspert
29. april 2004 - 15:56 #1
Der er en socket tutorial på http://www.cs.rpi.edu/courses/sysprog/sockets/sock.html

Et C program med en for(;;) løkke som laver recv og fputs burde kunne
tage fra ligeså hurtigt som netværket kan levere data.
Avatar billede dank Nybegynder
29. april 2004 - 16:40 #2
svj kan se omhandler denne side TCP connections. Er det smart når host=localhost - tænker mere i retning af hastighed?
Avatar billede arne_v Ekspert
29. april 2004 - 16:47 #3
Du vil bruge Unix sockets ?

Normalt forventer man at TCP/IP stakken gør noget smart med localhost traffik.

Men ellers mener jeg at koden stort set er ens og at eneste forskel
er i adressen og adresse typen.
Avatar billede arne_v Ekspert
29. april 2004 - 16:52 #4
Den her tutorial er mere eksplicit med hensyn til Unix sockets:

http://www-users.cs.umn.edu/~bentlema/unix/advipc/ipc.html
Avatar billede segmose Nybegynder
29. april 2004 - 16:53 #5
Avatar billede dank Nybegynder
29. april 2004 - 17:14 #6
arne> Dit første link: Den virker tilsyneladende.. kan du hjælpe med at sætte en lille løkke ind i den? Så vil jeg prøve at teste performance/datatab ved at smide et par tusinde linier ind i den i sek.
Avatar billede arne_v Ekspert
29. april 2004 - 18:47 #7
Hvis det er en blocking socket er det lige ud af landevejen:

      while ((len=recv(sd,buf,sizeof(buf),0))>0) {
        buf[len] = '\0';
        fprintf(fp,"%s",buf);
      }
Avatar billede dank Nybegynder
29. april 2004 - 19:29 #8
Tak.. opretter i svar? (primært Arne)
Avatar billede arne_v Ekspert
29. april 2004 - 19:32 #9
svar
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