stabiles Server-Clientsystem

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

juse4pro

Betreff: stabiles Server-Clientsystem

BeitragMi, Jul 14, 2010 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, ich hätte zu diesem Thema mal ein paar Fragen:

Wäre es besser UDP und TCP zu verwenden?

Wenn ich nur UDP verwende, muss ich die Verbindung "absichern"... wie geht das?

Gilt auch bei BNetEx die Regel: "Pakete kommen, wenn sie ankommen, stets 100%ig korrekt und vollständig an"? Bei Blitz3D war das ja so.

Wäre euch sehr dankbar...
Portfolio |LinkedIn |XING

Firstdeathmaker

BeitragMi, Jul 14, 2010 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Gilt auch bei BNetEx die Regel: "Pakete kommen, wenn sie ankommen, stets 100%ig korrekt und vollständig an"? Bei Blitz3D war das ja so.


Wenn du TCP benutz, dann ja. UDP ist eine ungesicherte Verbindung. Allerdings kannst du davon ausgehen, dass Pakete, wenn sie ankommen, auch so ankommen wie du sie losgeschickt hast, dafür gibt es auf unteren Layern Protokolle die das sicherstellen. Allerdings kannst du dir bei UDP nicht sicher sein, ob ein Paket A, das du vor Paket B losgeschickt hast, auch tatsächlich vorher ankommt. So etwas müsstest du absichern, z.B. indem du jedem Paket eine Nummer mitgibst. Z.b. wenn du in einem Shooter 10 mal die Sekunde die Position verschickst, dann ist ein Paket das verlohren oder zu spät ankommt wertlos, und kann einfach weggeworfen werden. Es macht dabei ja dann auch keinen Sinn es nochmal anzufordern.

Daher mein Rat: Allgemeine Steuersignale die nicht zeitkritisch sind, Dateiaustausch und Chat einfach über TCP.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

juse4pro

BeitragMi, Jul 14, 2010 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
dann müsste man aber stets 2 Ports im Router öffnen...
Ausserdem bleibt die Portnummer des Clients auch dynamisch, und ich müsste erst irgendwie mein Port rauskriegen, ihn per TCP mitsenden, und dann die UDP Verbindung aufbauen...

Würde das für ein simples MMO reichen?
-rumlaufen
-sich gegenseitig verhauen
das wars?
Portfolio |LinkedIn |XING

Jolinah

BeitragDo, Jul 15, 2010 8:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Games (zumindest Action-Games etc.) empfehle ich vorwiegend UDP. Bei TCP ist das Problem dass Pakete zurückgehalten werden können und dadurch einfach künstliche Lags entstehen können. Bei UDP kann man ein eigenes Protokoll implementieren dass zwischen "wichtigen" und "unwichtigen" Nachrichten unterscheiden kann. Bei den unwichtigen wird dann z.B. weder sortiert noch sichergestellt dass sie ankommen, dafür gibts keine Unterbrüche.

Natürlich ist es relativ kompliziert sowas selber umzusetzen. Aber es gibt auch fertige Libs. Was ich dies bezüglich sehr empfehlen kann ist Enet. Ich glaube bei BMax ist das sogar standardmässig enthalten als Modul pub.enet. Enet macht genau das, es legt nochmal einen Layer über UDP mit optional wichtigen Nachrichten und Datenflusskontrolle. Als Anwender von enet kann man ganz normal Nachrichten senden, egal wie gross die sind, sie werden intern automatisch auf einzelne UDP-Pakete aufgeteilt. Weiterhin hat man ein Verbindungsprinzip wie bei TCP. Funktioniert dann schlussendlich also fast wie TCP, aber läuft auf Basis von UDP.

Falls du Englisch kannst, hier noch ein sehr guter Artikel wie man selber so ein Protokoll basierend auf UDP realisieren könnte (und am Anfang auch nochmal, warum man bei Games UDP bevorzugen sollte).

http://gafferongames.com/netwo...dp-vs-tcp/

Für was einfaches reicht auch TCP, nur muss man da unter Umständen mit "unerklärlichen" Lags rechnen Wink

juse4pro

BeitragDo, Jul 15, 2010 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hui, okay danke, dann werde ich wahrscheinlich nur UDP verwenden...
Das Problem ist ich schnall nicht, wie man optimal die Pakete dynamisch zwischenspeichert Wink
Vielleicht stehts ja auch drin.
Portfolio |LinkedIn |XING

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group