Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4301[/thread]

Threads/Sockets: Performance mit Sockets

Leser: 2


<< >> 4 Einträge, 1 Seite
esskar
 2005-06-20 23:31
#37657 #37657
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=weismat,20.06.2005, 21:20]Ich kann ca. 4 mal 4092 Bytes lesen und dann ist Schluss.[/quote]
bist du sicher, dass mehr gesendet wird?
gib mal den return-wert von read aus...
wenn dieser <= 0 ist, musst du aufhören zulesen (sonst blockt read den prozess) bzw. mit IO::Select entscheiden, ob es noch was zu lesen gibt.

HTH
esskar
weismat
 2005-06-29 20:18
#37658 #37658
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich habe zu sehr in C gedacht ;-)
Es funktioniert nur mit skalaren Werten. Scheint eine Beschränkung des Moduls zu sein.\n\n

<!--EDIT|weismat|1120427865-->
weismat
 2005-06-20 23:20
#37659 #37659
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich schreibe eine Anwendung die von einem Socket Daten liest und an einen anderen Socket die gelesen Daten umformatiert schreibt. Die Anzahl der Nachrichten liegen bei 400-500 pro Sekunde. Dazu habe ich folgende Fragen:
Gibt es bei einem Socket die Möglichkeit eine die Empfangsseite nach /dev/null oder so umzulenken, da mich die Antworten auf meine Writes ignorieren kann ohne Probleme mit dem Überlauf zu haben.
Nach 2000-3000 Reads bricht die Leseseite zusammen und mein Programm hängt, welche Möglichkeiten gibt es dazu zum Abfangen. Wie kann ich einen größeren Puffer erstellen. Ich kann ca. 4 mal 4092 Bytes lesen und dann ist Schluss. Gibt es sonst etwas mit dem ich die Performance beeinflussen kann? Ich kann gerne auch Code posten, aber ich denke, daß mir etwas konzeptionelles mehr bringt.
Bisher vereinbare ich den Socket wie folgt:
Code: (dl )
1
2
3
4
5
6
7
8
9
  my $remote = IO::Socket::INET->new(

Proto => "tcp",

PeerAddr => $_[1],

PeerPort => $_[2],

) or die "Can not create port";
\n\n

<!--EDIT|weismat|1119295420-->
weismat
 2005-06-22 18:12
#37660 #37660
User since
2003-08-18
142 Artikel
BenutzerIn
[default_avatar]
Ich benutze zur Zeit recv, ist das schlechter als read?
Als ich den Code so umwandeln wollte, daß ich Threads bekomme, habe ich folgenden Fehler bekommen:
Invalid value for shared scalar at C:/Perl/lib/Thread/Queue.pm line 90.
Die relevanten Zeilen bei mir sind im Main-Programm:
Code: (dl )
1
2
3
my %message=$api->receive();
my $result=\%message;
$queue->enqueue($result);

und im Working Thread
Code: (dl )
1
2
  while (my $pitem=$queue->dequeue) {
my %result=\$pitem;

Hat jemand eine Idee, was ich falsch mache?
<< >> 4 Einträge, 1 Seite



View all threads created 2005-06-20 23:31.