udp host-client prinzip
Übersicht

mudvayneBetreff: udp host-client prinzip |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi all
Ich schreibe momentant ein Multiplayer-Echtzeit-Aufbau-Strategie-Spiel mit meinem Kollegen zusammen (unser erstes BlitzBasic Projekt, vorher in Java Single-Player-Games gecodet) Unser Problem liegt darin dass wir nicht wissen, wie wir den UDP-Paeckchen-Verkehr loesen sollen. Beispiels-Situation: Wir haben 3 Spieler (Host, Client1, Client2) Alle Clients schicken nun immer die X/Y-Koordinaten und den Sichtradius all ihrer Gebaeude und Einheiten zum Host. Wenn sich nun z.B. die X/Y-Koordinaten eines Gebauedes oder einer Einheit von Client1 im Sichtradius der Einheit X von Client2 befindet, muss der Client2 ja Daten vom Client1 erhalten, um die Einheit oder das Gebaeude von Client1 anzeigen zu koennen. Nun zur eigentlichen Frage: Wenn die oben erlaeuterte Situation eintrifft, wie sieht der UDP-Paeckchen-Verkehr? Schickt der Client1 nun seine Einheiten- oder Gebaeude-Daten an den Host und dieser leitet sie weiter an den Client2 oder Schickt der Client1 nun seine Einheiten- oder Gebaeude-Daten direkt an den Client2, bis er vom Host erfaehrt, dass die oben gennante Beispiels-Situation nicht mehr eintrifft (Falls beide Varianten moeglich, welches sind die Vor- und Nachteile?) |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich mache zwar TCP, aber ich denke das is das gleiche Prinzip. Also Senden Writebyte stream,1 ;sagt dem Empfänger es geht um z.b. einen Spieler Writebyte stream,1 ;sagt dem Empänger es geht um Spieler 1 Writeshort,x writeshort,y sendudpmsg empfänger select readbyte(stream) case 1 ;falls es um den Spieler geht ID = readbyte x= readshort y=readshort case 2 ;es geht um map case 3 ;es geht um PM's ..... Hoffe ich konnte dir (euch) einen Ansatz liefer wie man das Lösen kann. Mfg TimBo |
||
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. |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schwierige Sache ![]() Ich hab mir so eine Aufgabe noch nie gestellt, da der Datenverwaltungsaufwand wie du soeben erkannt hast extrem hoch ist. Je nachdem wie die Systemauslastung jetzt ist würde ich mal versuchen, alles dem Server zu schicken und der schickt die Daten nach Bedarf weiter. Allerdings weiß ich nicht, wie sehr dann euer Server keucht und schnauft. Könnte schnell zuviel werden. Du könntest auch einfach alle Daten senden und jeder Client überlegt sich selbst, ob er eine gegnerische Einheit sieht oder nicht. Das würde dann auch peer2peer gehn (Client schickt direkt an Client). Was du davon jetzt machst hängt meiner Meinung nach 1.) davon ab nach welchem Prinzip ihr bisher arbeitet und 2.) davon wieviel ihr dem Server zumuten könnt bzw wie ressourcenfressend eure Berechnungen sind. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
emcapone |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
befinde mich auch momentan in ner ähnlichen situation. ich habe es jez so gelöst, dass die clienten ihre nachrichten zum host schicken und der host sie an alle anderen spieler weiterleitet...
bei zwei spieler ist ein "host" nicht notwending denke ich aber wenn mehrer spieler mitspielen sollen, gibt es wohl keine bessere lösung... oder (?) |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schlechte idee die sichtdaten etc zu schicken.
Denn die Konsistenz kann nur gewährleistet werden wenn EIN System entscheidet. Das ist der Server / Host und der hat logischerweise die gleichen Daten wie alle anderen -> also auch sichtweiten etc. Ein Aufbaustrategiespiel ist normalerweise nur bedingt actionorientiert, insofern würde ein TCP basierender RPC (remote procedure call) Ansatz da sehr gut funktionieren. Denn was senden in so einem Spiel die Clients normalerweise? -> Bewegungszielangabe für Einheitenbewegungen sofern es sowas gibt, Bauaufträge für Position / Feld X etc Bei bewegung würde der server dann den bewegungspfad berechnen und dem client schicken oder der client errechnet, schickt an server und der server entscheidet ob der überhaupt möglich ist (anti cheat) UDP macht nur bei actionoriertiertem Gameplay Sinn, denn bei allem anderen muss man die TCP Verhalten ebenfalls implementieren und ist im endeffekt nicht wirklich schneller als TCP aber hat dafür mehr zoff mit Routern weil TCP ein Stream ist, UDP hingegen jedoch nicht. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo...
in den diversen Tuts zum Thema Multiplayer. Wird UDP doch aber immer als Stream behandelt. Wo genau liegt denn der unterschied? Ich muss ja auch unter UDP mittles OpenUdpStream() einen öfffen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst den Stream nur, damit du was zum Schreiben/Lesen hast. Wenn du dann die Daten sendest werden die Pakete einfach ins Netz geschossen und du kannst dir nicht sicher sein, dass sie ankommen. Hier stellen sich, wie von Dreamora angemerkt, unter anderem gerne mal die Router in den Weg und nicht jeder ist bereit Ports zu öffnen und Firewalls auszustellen. | ||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi..
soll heissen. Das ich mit CreateUdpStream() zwar einen Stream inclusive Port öffen. Aber das noch lange nicht heist das die daten auch durchgelassen werden. Solange der Stream offen ist. Sollte das doch aber gehen. Jemand hir der schon negative erfahrung in dieser richtung gemacht hat? Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein UDP öffnet keinen Stream
Blitz wrappt das einfach in die Stream Befehle. Aber UDP ist einfach nur ein Packetprotokoll, da gibts keine Garantie für garnichts. Speziell nicht das Packete ankommen. Das müsstest du dir in UDP alles selbst implementieren. Das ist dann auch der vorteil: Man kann selbst entscheiden was garantiert ankommen muss (zb. login, logout messages etc) und was nicht (positionsupdates in einem shooter und so). Denn das garantieren der ankunft ist das was TCP in den 100ms latenzbereich katapultiert während UDP auf erheblich weniger operieren kann. Wenn du eine UDP "Verbindung" hast geht alles durch, was ankommt. Was nicht ankommt ist flöten, das wird nicht noch einmal versandt. Deswegen empfehle ich normalerweise, seit ich im englischen Board von einem netten User korrigiert wurde, TCP sofern UDP nicht zwingend notwendig ist (und wenn dann ENet / Blitz ENet, nicht rein UDP). Denn wenn man mit TCP die gleiche Packetimplementation nimmt wie bei UDP ist es ebenfalls höchst performant. (TCP wird nur dann langsam wenn man WriteLine / ReadLine nutzt, weil das byte um byte abarbeitet) Den Teil mit den Routern und Firewall würde ich so nicht unterschreiben. Denn im Endeffekt muss man UDP als auch TCP erlauben beim Host. Die Standardsettings sind nur normalerweise TCP freundlicher womit es für Standarduser "tauglicher" ist. Aber um wirklich keine Probleme zu haben macht man am einfachsten einen Masterserver der das Punch Through regelt (auf Heise.de hats einen Artikel wie Skype das macht, damit sollte man das lösen können) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ----
der Artikle würde mich interesieren. Haste zufällig einen Link. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, davon ist die Rede:
http://www.heise.de/security/W...ikel/82054 Wenn du etwas damit zustande bringst, lass es uns bitte wissen, tft ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi..
ja so änlich hatte ich mir das gedacht. Mit PHP solte sich das ja auf nem WebSpace mit PHP unterstützung machen lassen. Das mit der Router /In,Out liste wuste ich noch nicht. Macht die sache aber logisch. Und wer sich hinter einer dicken FireWall versteckt. Muss dann halt sehen. Gruss TFT |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group