Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

T-VIRUS

Alter Hase

  • »T-VIRUS« ist der Autor dieses Themas

Beiträge: 548

Wohnort: Göttingen(West)/Nordhausen(Ost)

Beruf: Schüler

  • Private Nachricht senden

11

10.08.2006, 11:53

Ich habe nochnicht mal ne große Ahnung davon aber will es jetzt mal lernen ;D
Ich kann mit deinen Fragen nicht viel anfangen :p
Meine Blog:)

Wer Bugs im Text findet kann sie melden, fix erscheint irgendwann :D

MFG T-VIRUS

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

10.08.2006, 21:30

Ich nutze blocking + threads sowie TCP/IP. UDP habe ich auch schon versucht, ist aber nicht wirklich was gescheites. Ich kompremiere die Daten per zlib und nutze davon auch den Checksum-Algo adler32. Verlorene Pakete lasse ich mir nicht nochmal schicken, da es ein absoluter overhead ist, wenn für jedes Paket noch ein Antwortpaket geschickt werden muss. Anstatt dessen gibt es / ist ein regelmäßiger Sync Frame geplant(also wo alles nochmal neu geladen wird).
Zum Handling von einkommenden Nachrichten:

Ich arbeite mit Callbacks und verzichte auf ein einzelnes Paket holen, wie es viele andere machen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

13

11.08.2006, 09:20

Hmmm... und wie siehts mit der Performance aus? Ich mein TCP und Blocking + Threads ist ja nicht gerade der Performance Booster ;)

Und was meinst du mit "einzelne Pakete holen?"
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

14

11.08.2006, 09:48

Was anderes als TCP ist eigentlich eher Schwachsinn, weil es viel Sicherheit von Haus aus bietet. Es gibt kaum Spiele, die nicht darauf bauen (mal abgesehen von alten IPX-basierenden Spielen) und das hat garantiert einen Grund ;) .
Da ich gestehen muss, dass ich noch nicht über 3 Clients auf einem Server hinweg gekommen bin, da mir einfach die Rechner fehlen und der Client nur aktiv ist, wenn er im Fokus ist, kann ich zu der Performancefrage wenig sagen. Es sollte aber immernoch besser sein als NonBlocking + Threads, wobei NonBlocking + sleep(0) + Threads auch einer Überlegung Wert wären. Du kannst ja auch Non Blocking + Select nutzen.
Mit den "einzelne Pakete holen" mein ich die Lösung, dass man in der Hauptschleife per QueryPacket jedes einzelne Paket welches angekommen ist erst abfragen muss und dann testen, wo es nun hingehört.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

15

11.08.2006, 10:49

FPS nutzen TCP!?
Hab einige Tutorials gelesen, und da sagen sie, dass man für FPS und Rollenspiele 100% UDP verwenden sollte, weil TCP zu langsam ist... Was stimmt nun? ;)

Außerdem gibts da noch so eine andere Seite wo einer die verschiedenen Sockettypen vorstellt, also nonöblocking, asynchron, blocking und overlapped, und der sagt, dass blockingcalls die langsamsten sind. Außerdem meint ein anderes Tutorial, dass man möglichst das verwenden von Threads bei Netzwerksachen vermeiden sollte, da das umschalten zwischen den beiden meist mehr schadet als nutzt!
Wie gesagt. Habe viel gelesen, doch leider keine Praxiserfahrung. Könnt ihr mir sagen, in welche Richtung ich arbeiten sollte?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

16

11.08.2006, 11:54

So jetzt sind wir genau an dem Punkt wo sich zeigt, das zwischen einem kleinen Chat und einem großen Programm Welten liegen^^.
Also Counterstrike nutzt TCP und UDP, wobei das UDP wohl für den Chat ist. Wc3 nutzt TCP. WoW nutzt TCP. AOE nutzt sowohl TCP als auch UDP, wobei anscheinend beides benötigt wird, was wieder auf eine Trennung von Chat und Spiel bedeuten kann.
Warum man UDP für den Chat ist ja klar. Man ist unabhängig vom Server und kann trotz Servercrash noch mit einander in Verbindung bleiben. Das macht aber bei Spielen mit einem Hauptserver weniger Sinn, weil keiner der Clients als Host einspringen kann. Daher läuft ihr meist alles über den Hauptserver.
Zu dem Geschwindigkeitsthema kann ich wenig sagen. Ich werde noch testen ob non-blocking + threading + sleep(0) oder non-blocking + select besser sind.
Threads sind für viele ein rotes Tuch, weil es eine gewisse Disziplin und bestimmte Konzepte erfordert, um Probleme zu vermeiden. Threads sind auch bei der Fehler suche etwas heikel, aber wenn man die Anzahl der Berührungstellen(bei mir nur eine) klein hält, ist das gut machbar. Wie sich Threads bei Clientanzahlen von 100- auf die Leistung und Serverantwortzeit auswirkt weiß ich nicht.
Aber selbst wenn sich zeigen sollte, dass die Anzahl an Threads nicht handlebar ist, dann werde ich dennoch einen empfangsthread mit der Select Anweisung, um das Hauptprogramm zu entlasten.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Anonymous

unregistriert

17

11.08.2006, 12:25

Interfacedesign ist hier wieder das A und O ;) Ob UDP und TCP/IP oder IPX: Alle haben einen gemeinsamen Nenner, den man mit Interfacedesign gut abdecken kann.

Ich persönlich habe ein Interface gemacht und die möglichen Protokolle davon abgeleitet. In der Regel benutz ich jedoch UDP - aber das macht bei einem Interfacedesign kein Thema mehr was man benutzt.

Doch man muß drauf achten, das der Server und der Client das selbe Protokoll benutzen.

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

18

11.08.2006, 12:28

Wenn man jetzt zB Mulitplayer bis zu 10 oder so clients unterstützen will, ist TCP schnell genug? Ich wäre froh, wenn ich mit TCP arbeiten könnte, würde viel arbeit ersparen...
Was hältst du von Overlapped Sockets? Hab gelesen, dass sie die schnellsten sein sollten... Stimmt das?
Mit welchem Algorithmus der zlib komprimierst du die Daten?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

19

11.08.2006, 12:30

@nix da
Könntest du mir ein paar Tipps zum InterfaceDesign geben? Auf was muss man achte, was kann man ignorieren?
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

20

11.08.2006, 12:48

TCP wird alle mal reichen, wenn es auch für WoW reicht ;)
besonders weil es viele Sicherheitsvorkehrungen von Haus aus hat.
Also für mein Konzept wäre ein Overlapped Socket unbrauchbar. Auch bringt das zwischen Buffern ein wenig mehr Sicherheit ins Spiel, da man erst die Daten lesen und dann, wenn alles passt, dropen kann. Bei der Zlib nutzte ich die einstellung Z_BEST_SPEED jedoch ist das schnell geändert. Aber vorsicht, die Funktionen deflateInit und inflateInit ziehen ziemlich an der Leistung. Man sollte die am besten so wenig wie möglich aufrufen und die Streams immer nur resetten. Wenn du möchtest, könnte ich dir Auszüge aus meinen Daten zukommen lassen, auch wenn ich da sicher noch einiges überarbeiten werde.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige