Du bist nicht angemeldet.

Werbeanzeige

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 152

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

1

28.10.2020, 22:05

Reliable UDP

Hi,

ich möchte mich an einem Shooter Remake versuchen.
Ich arbeite mit Unity.

Aktuell arbeite ich mich grad in UDP ein, da ich gerne eine eigene Implementation benutzen möchte.
Meine Frage: wie implementiert man am besten rUDP?
Reicht es wenn man eine fortlaufende Nummer mitschickt, die der Empfänger dann zurückschickt wenn das Paket vollständig bekommen hat? Wenn der Empfänger in einem bestimmten Zeitraum nichts meldet, wird das Paket nochmal geschickt.


Läuft das prinzipell so ab, oder funktioniert das anders?



Gruß

2

28.10.2020, 22:53

Hey,

Wenn du mit mit TCP arbeitest, dann stellt sich die Frage garnicht erst ^^.
TCP übernimmt dann die Logik, die für die Kontrolle der Pakete zuständig ist.

Gruß,
Timmyew. :)

David Scherfgen

Administrator

Beiträge: 10 289

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

28.10.2020, 23:50

Ja, so funktioniert das ungefähr. Eine sehr empfehlenswerte Artikelreihe dazu: https://gafferongames.com/categories/bui…twork-protocol/
TCP verwendet man normalerweise nicht bei Shootern etc., da es dafür nicht gedacht ist und einige Nachteile mit sich bringt (siehe ersten Artikel).

Schrompf

Alter Hase

Beiträge: 1 397

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

29.10.2020, 10:25

Spiele nehmen UDP, weil sie dadurch die Wahl haben, ob sie Reliable verschicken wollen oder nicht. Die State-Updates 20x pro Sekunde schickst Du üblicherweise einfach raus, weil es egal ist, ob die verloren gehen. Bei denen reicht eine einfache Sequenz-Nummer, damit Du erkennst, falls UDP-Pakete einander zeitlich überholen.

Für's Reliable UDP brauchst Du dann irgendne Art von Paket-ID und Länge - UDP kann Dir die Pakete auch auseinander reissen. Davids Link ist da echt super.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 152

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

5

11.11.2020, 21:12

Hi,

danke für den Link. So 100% verstanden hab ich ihn aber noch nicht...



Ich sende jetzt für jedes Reliable-Packet eine Sequenz-Nummer mit (ein Int) die der Empfänger dann wieder zurück sendet damit der Sender weis, dass das Packet angekommen ist.

Wie verhindere ich aber, dass in der Zeit, die der Empfänger braucht und die Antwort zu schicken, der Sender das Packet schon ein 2. mal geschickt hat.
Dann kommt das Packet ja 2 mal beim Empfänger an.


Wie kann ich sowas verhindern.




Gruß

David Scherfgen

Administrator

Beiträge: 10 289

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

11.11.2020, 22:11

Das musst du gar nicht verhindern. In einem solchen Fall "verschenkt" man zwar Bandbreite, aber ansonsten schadet das nicht. Der Empfänger merkt sich, welche Pakete er bereits bekommen hat, und wenn eines mehrfach ankommt, dann ignoriert er es einfach.

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 152

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

7

11.11.2020, 22:30

Ok, sowas hab ich mir auch gedacht.

Aber wenn zB - auf einen Shooter bezogen - das Packet "Waffe Abfeuern" 2x beim Server ankommt, ist ja auch blöd.

Reicht es dann, wenn ich mir - zB - die letzten 100 Sequenz-Nummbern beim Empfänger merke und wenn das ankommende Packet schon drin ist, es ignoriert wird?




Gruß

David Scherfgen

Administrator

Beiträge: 10 289

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

11.11.2020, 23:16

Im verlinkten Artikel wird im Abschnitt "Sequence Buffers" beschrieben, wie man sich merken kann, welche Pakete bereits empfangen wurden.

Schwarzefee

Treue Seele

  • »Schwarzefee« ist der Autor dieses Themas

Beiträge: 152

Wohnort: Ost-Sachsen

Beruf: Programmierer

  • Private Nachricht senden

9

12.11.2020, 10:51

Hi,

ja das mit dem Sequence Buffer, ack und ack_bits hab ich nicht so richtig verstanden.

Könnt ihr mir das nochmal kurz erläutern?



Gruß

Werbeanzeige