Seite 3 von 3

Verfasst: 14.09.2005 07:28
von MVXA
Ja, aber wenn die CPU wegen meinem Programm auf Wolke 100%
schwebt, dann kommen sicher irgendwelche Fragen von Benutzern,
warum die CPU Auslastung so hoch steigt.

Verfasst: 14.09.2005 08:05
von tranquil
Also irgendwie reden hier alle aneinander vorbei.

Wenn Netzwerkevents ordentlich von OS mittels WSAAsyncSelect_() an ein Fenster gemeldet und "abgearbeitet" werden, so wird das Programm NUR und auch NUR DANN zu 100% ausgelastet wenn die der Client/ Server auf der anderen Seite auch in der Lage ist das Datenaufkommen so schnell zu verarbeiten.

Das ganze macht auch Sinn! So ist der Request "as fast as possible" abgearbeitet - so wie es sein soll. Warum länger warten wenn das nicht sein muss.

Bei der Entwicklung eines Servers ist das übelst wichtig!
Das Senden von Daten sollte hier sowieso in Threads geschehen (pro Sending ein Thread) um Lasten möglichst gleichmäßig zu verteilen.
Würden keine Threads benutzt hätte das zur Folge das Client B (DSL) auf den Server warten muss weil Client A (ISDN) nicht in der Lage ist die Daten schnellstmöglich zu empfangen und der Socket damit immer in den BlockedMode fällt.

Wenn man es genau macht vergibt man je nach Prozessor noch eine MaxThreads-Variabel welche die maximale Anzahl von Threads auf den Server festlegt. (Somit ist Gewährleistet das alle Clients kontinuierlich mit einer guten Performance bedient werden)
Alle anderen anstehenden Anfragen sollten in einer LinkedList auf abruf gespeichert werden bis wieder freie Threads zur verfügung stehen.

Threads haben noch einen anderen großen Vorteil: Bei mehr Prozessorsystemen oder HT-Pentiums werden die Lasten durch das OS auf alle Prozessoren verteilt. Eine höhere Performance ist das Resultat des ganzen.

So, und NUR SO werden vernünftig funktionierende Netzwerkroutinen programmiert.

Ich hab den Eindruck viele stellen sich das Netzwerkeln einfach zu leicht vor.

Die meisten Sources der Clients/ Server die ich im englischen & deutschen forum gesehen habe kann ich mittels einer ungültigen Abfrage durch ein eigenes Programm einfach so abstürzen lassen. Auch da sollte sich die Programmierer mal gedanken drüber machen. Aber das nur mal so als Off-Topic nebenher.

Gutes gelingen...

Verfasst: 14.09.2005 13:03
von Batze
Das mit den Threads ist schon richtig. Es gibt schon viele PCs mit mehr als einer CPU.
Aber das ist halt schwierig, da Threads in PB noch immer ein Problem sind.

Verfasst: 14.09.2005 14:13
von hardfalcon
Mit Threads gibts AFAIK ein Problem: Man darf kein DirectX in threads benutzen. Und AFAIK werden die Network-Befehle von PB doch mittels DX umgesetzt, oder? Also müsste man z.B. die UDP-Lib nehmen...

//EDIT: Stimmt doch nicht, habs grad nachgeschaut, da steht nix von DirectX. :oops:

Verfasst: 14.09.2005 14:33
von tranquil
Die PB Netzwerk-Kommandos sind direkte Wrapper zur Windows API. Man kann alternativ aus Send_ oder Recv_ benutzen. Sind fast 1:1 wie in PB zu verwenden.

Es aber auch bei den PB Befehlen kein DirectX benutzt.

Verfasst: 14.09.2005 23:22
von Andre
tranquil hat geschrieben:Die meisten Sources der Clients/ Server die ich im englischen & deutschen forum gesehen habe kann ich mittels einer ungültigen Abfrage durch ein eigenes Programm einfach so abstürzen lassen. Auch da sollte sich die Programmierer mal gedanken drüber machen. Aber das nur mal so als Off-Topic nebenher.
Da das ja dann mehr oder weniger auch das CodeArchiv betrifft, würde ich gerne mal Deine Hilfe zum "Aufräumen" der entsprechenden Sektion im Archiv bzw. Füllen mit "Vorzeige-Codes" in Anspruch nehmen.... :twisted:

PS: Ist durchaus Ernst gemeint, also wenn Du möchtest + Zeit hast... :allright:

Verfasst: 15.09.2005 08:24
von tranquil
Hab grad mal nen kurzen Blick ins CodeArchiv geworfen. Wenn ich folgende Sources sehe dann drehts sich mir im Magen um:

http://www.purearea.net/pb/CodeArchiv/I ... /Server.pb
http://www.purearea.net/pb/CodeArchiv/I ... /Client.pb
http://www.purearea.net/pb/CodeArchiv/I ... bserver.pb

Kein Errorhandling, keine Checks auf gültigkeit etc. etc. Wirklich nur ganz ganz simple Beispiele. Wer sowas in seinen Applikationen benutzt läuft auf kurz oder lang gegen eine Wand. Wenn ich nächste Woche mal etwas Zeit haben sollte werd ich mal nen Network Tutorial schreibseln. Ist glaube ich mal angebraucht. :-)

Verfasst: 15.09.2005 09:16
von HeX0R
Nun in erster Linie sind das Examples, weswegen nur ein völliger DAU denken würde, solche CodeSchnippsel wären gegen sämtliche Eventualitäten gefeit.
Wenn ich nen Code-Beispiel mache, schaue ich, dass es so verständlich wie nötig ist, und nicht so angriffsresistent wie möglich.
Ich gehe dann einfach davon aus, dass der fortgeschrittene User sich der Sicherheitslücken durchaus bewusst ist, der Normalo User aber eher verwirrt wäre von solchen Techniken.

Aber nix desto trotz wäre ein fortschrittlicheres Beispiel bestimmt auch nicht verkehrt! :allright:

Verfasst: 17.09.2005 16:52
von Andre
tranquil hat geschrieben:Hab grad mal nen kurzen Blick ins CodeArchiv geworfen. Wenn ich folgende Sources sehe dann drehts sich mir im Magen um:

http://www.purearea.net/pb/CodeArchiv/I ... /Server.pb
http://www.purearea.net/pb/CodeArchiv/I ... /Client.pb
http://www.purearea.net/pb/CodeArchiv/I ... bserver.pb

Kein Errorhandling, keine Checks auf gültigkeit etc. etc. Wirklich nur ganz ganz simple Beispiele. Wer sowas in seinen Applikationen benutzt läuft auf kurz oder lang gegen eine Wand. Wenn ich nächste Woche mal etwas Zeit haben sollte werd ich mal nen Network Tutorial schreibseln. Ist glaube ich mal angebraucht. :-)
Tutorial, jaa.... :allright:

Und für die Beispiele denke ich auch in die Richtung wie HeX0R. Wenn es ein fortgeschritteneres Beispiel für das CodeArchiv gäbe (ich weiß jetzt nicht, was ich vielleicht im letzten Jahr bereits an neuen Codes gesammelt habe), könnte man die "simplen" ja drin lassen, aber entsprechend als "Basics" kennzeichnen und auf das umfangreichere Beispiel hinweisen...