p2p Objektsynchronisation
-
Ich arbeite an einem p2p Netzwerksystem für ein Echtzeitspiel,
dabei tummeln sich eine Menge 'geteilter Objekte' auf den Rechnern.Meine Frage:
Sollte ich für jede Verbindung zu einem Peer auf jedem Rechner jeweils eine Socket-Verbindung öffnen, und die ankommenden Objektstatus-Synchronisationspakete (etwa Spielerkoordinaten, oder geänderte Spielweltdaten) dann mittels eines 'Net-Managers' weiterleiten an die richigen Empfänger-Objekte,-oder sollte ich besser für jedes dieser 'geteilten Objekte' eine eigene Socket-Verbindung zu jeder weiteren Instanz auf anderen Peers aufbauen?
Variante A kommt klar mit viel weniger Verbindungen aus, produziert aber viel Traffic, da jedes Datenpaket eine ID braucht, die aufklärt, für wen es überhaupt bestimmt ist. (Die Ritterrüstung hat ID 447, wenn sich ihre Koordinaten ändern, muss diese ID zusammen mit den Koordinaten an alle anderen Peers mitgesendet werden, damit die jeweiligen Net-Manager auf den Peers wissen, für wen das Paket (die Koordinaten also) überhaupt bestimmt ist.
Variante B produziert (NumOfPeers-1)*NumOfSharedObjects Socket-Verbindungen PRO Peer! Erspart dafür das Mitschicken der ID.
Welche Variante würdet ihr vorziehen?
Berücksichtige ich einige Argumente nicht?
Gibt es vielleicht eine bessere Lösung der Problemstellung?Gruß,
- ein Javajaner
-
Mir viele ansonsten noch der Weg über RMI ein..
Die Situation muss doch sehr verbreitet sein:
Man hat ein Spiel und muss die Spielobjekte, die geteilten Objekte, synchron halten.Ich würde mich sehr über Anregungen freuen!
-
Also wenn du dir schon wegen eines 4-Byte-Integers für die ID eines Objektes Sorgen wegen zu viel Traffics machst, dann ist RMI ganz sicher nichts für dich.
Den Weg mit je einer Verbindung pro Objekt halte ich allerdings auch nicht für sinnvoll. Ich denke in Zeiten von Breitband-Internet (Online-Spiele sind mit weniger eh nicht wirklich gut spielbar) wird eine zusätzliche im schlimmsten Fall 4-Byte große (weniger ginge wohl auch) ID die Bandbreite nicht sprengen, also durchaus (über-)tragbar sein.
-
IPogo schrieb:
Also wenn du dir schon wegen eines 4-Byte-Integers für die ID eines Objektes Sorgen wegen zu viel Traffics machst, dann ist RMI ganz sicher nichts für dich.
Den Weg mit je einer Verbindung pro Objekt halte ich allerdings auch nicht für sinnvoll. Ich denke in Zeiten von Breitband-Internet (Online-Spiele sind mit weniger eh nicht wirklich gut spielbar) wird eine zusätzliche im schlimmsten Fall 4-Byte große (weniger ginge wohl auch) ID die Bandbreite nicht sprengen, also durchaus (über-)tragbar sein.
Das klingt plausibel, dann werde ich die IDs einfach mitschicken. Ich hatte das Gefühl, etwas wichtiges zu übersehen/ignorieren...
Danke für die Antwort!