UDP Nachfrage.

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: UDP Nachfrage.

BeitragMo, Jul 15, 2013 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hi nun habe ich eine allgemeine nachfrage zu UDP

ist udp in der lage ein programm zum hängen zu bringen?
( es ist mir bislang nicht passier aber es ist eben generell gefragt z.b. bei älteren pc's als derzeit mein i5 )

ich stelle es mir nun so vor der server sendet stehts Nachricht%=1 | ID% vom mob | X# | Y# zum clienten, ich weiss ja nicht alles via udp muss ankommen. darum feuere ich es nun sozusagen pausenlos raus. könnte es sein das der client dann überarbeitet ist? falls jede anfrage ankommen sollte?
( was so denke ich nicht passieren wird. )

Wenn diese frage nun mit ja beantwortet werden muss oder müsste. wieviel sekunden muss man den server auf den jeweiligen spieler nun warten lassen?

also dauersendung? oder wenn MS = 50 dann sende. was ist besser? wie geht man da richtig vor?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

Kruemelator

BeitragDi, Jul 16, 2013 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie du schon sagtest je weniger du sendest desto besser (für Menschen mit schlechter Leitung).
Um den Cpu in die Knie zu zwingen reichen übliche Internetverbindungen nicht aus, wie das bei einer direkten Lan-Verbindung ist weis ich nicht.

DAK

BeitragDi, Jul 16, 2013 7:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch mit direkter LAN-Verbindung kriegst du rein mit Senden und Empfangen selbst in die Jahre gekommene CPUs nicht in die Knie. Wenn die Verarbeitung des Empfangenen aber sehr aufwändig ist (z.B. knacke den empfangenen Hash oder so), dann sehr wohl, allerdings liegt es dann nicht rein am Senden und Empfangen.

Du solltest dir aber Gedanken darüber machen, wie oft du ein Update brauchst, und wie du bei wenigeren empfangenen Paketen immer noch ein ruckelfreies Bild hinkriegst. Dazu empfehle ich folgenden Post: https://www.blitzforum.de/foru...t=netzwerk

Bei UDP kann es übrigens auch sein, dass die Reihenfolge der Updates sich vertauscht. Deswegen solltest du bei jedem Update noch einen Timestamp mitschicken, und immer nur das neueste Update behalten und ältere verwerfen.
Gewinner der 6. und der 68. BlitzCodeCompo

Mathias-Kwiatkowski

BeitragMi, Jul 17, 2013 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
dann ist es also immer schwer es richtig auszuhandeln oder?
da jeder eine eigene internetleitung besitzt. oder gibt es eine art faustregel?

z.b. bei 10 mobs alle 50 ms aktualiesieren lassen oder so?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

TimBo

BeitragMi, Jul 17, 2013 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
meistens langt es, wenn man Events sendet und nicht gleich die ganze Position. Dafür wäre aber TCP eventuell besser geeignet.

Bsp. Spieler steht, Spieler bewegt sich mit Winkel dahin, Spieler steht, Spieler dreht. etc.


Edit: ich kenne keinen, der seinen Status alle 50ms ändert. Wink
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

Jolinah

BeitragMi, Jul 17, 2013 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde sagen das hängt alles sehr stark vom Spieltyp ab. Bei Action-Games wird meist schon so 10-50 mal pro Sekunde immer wieder ein Positions-Update oder die Eingaben des Spielers gesendet, (da wäre aber sicher UDP zu empfehlen).

Bei anderen Spielen hingegen macht das kaum Sinn. Da dürfte es wie bereits erwähnt ausreichen nur bei Änderung der Richtung oder Geschwindigkeit etc. eine einmalige Nachricht zu senden und den Client das Objekt mit der letzten empfangenen Richtung/Geschwindigkeit bewegen zu lassen. Zwischendurch evtl. paar Updates mit absoluter Position um Abweichungsfehler wieder zu korrigieren.

Betreffend 10 Mobs und mehr: Hier kann man mit Sichtbarkeitsradien überprüfen welcher Spieler welche Mobs und anderen Spieler sieht, und nur von diesen Objekten die Updates an den jeweiligen Spieler senden. Es macht keinen Sinn in einer riesigen Welt die Position von jedem Objekt zu kennen, obwohl man es nichtmal sehen kann. Dadurch kann man den Traffic in Grenzen halten.

Aber ursprünglich war deine Frage ja, ob man pausenlos senden sollte, oder nur alle paar Millisekunden. Ich würde nicht mehr als 10-30 Updates pro Sekunde empfehlen. Alles andere verschleudert nur unnötig Traffic, da das Resultat dadurch auch nicht viel besser wird. Die Ruckler sollte man dann mit Interpolation/Extrapolation oder ähnlichem für den Client unsichtbar machen.

Generell kann ich für Spiele fast nur UDP empfehlen. Man kann dieses so erweitern das bei Bedarf trotzdem zuverlässige Nachrichten wie bei TCP möglich sind, ohne die Nachteile von TCP zu haben. Da muss man das Rad aber nicht neu erfinden. Es gibt Bibliotheken wie enet, oder Lidgren (für .NET).

DAK

BeitragDo, Jul 18, 2013 9:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Generell solltest du heraus finden, was das absolute Minimum ist, mit dem dein Spiel auskommt, und das dann verwenden.

Das deswegen, weil du nicht nur die aktuelle Bandbreite berücksichtigen musst, sondern auch daran denken musst, dass inzwischen doch recht viele Leute per UMTS surfen, und dabei ein Traffic-Limit haben. Und so ein oder zwei GB sind bei Dauerfeuer doch recht schnell ausgesoffen.

WoW z.B. kommt mit Positionsupdates alle 500ms aus, einfach nur deswegen, weil (a) das Spiel nicht so eine schnelle Reaktionszeit braucht, und (b) extrapoliert wird. Das kannst du dort gut sehen, wenn ein Spieler ein Stück gerade rennt und dann eine Kurve dreht. Dann siehst du den Spieler weiter gerade aus laufen und dann wird er plötzlich ein paar Meter in Richtung der Kurve teleportiert. Fällt kaum auf, wenn man nicht drauf achtet, und stört auch gar nicht.

Bei einem Action Shooter musst du natürlich öfters ran. Aber selbst NFS World kommt dank guter Extrapolation mit einem Update alle 100-250ms aus.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group