WinSock - Problem
-
Hmm, welches Protokoll verwenden große Teams wie zB. Blizzard?
Denn bei World of Warcraft zB. muss es ja eine "Absicherung" geben, da man ansonsten leicht Items verlieren oder schummeln könnte, wenn keine 99,9% Absicherung besteht.
Wie macht man das?
-
War deine Frage auf meine Antwort bezogen?
-
Eigentlich schon.
-
TCP/IP stellt schon sicher daß das, was du abschickst, auch alles bei der anderen Seite ankommt. Du musst lediglich recv() in einer Schleife aufrufen, da die Daten wie schon gesagt, nicht in den "Paketen" ankommen müssen, wie sie abgeschickt werden. Stell es dir mehr wie einen Datenstrom vor.
-
das kann man ganz einfach lösen indem man einen header, der immer die gleiche größe hat, nimmt wo dann die größe der eigentlichen daten drinsteht. oder durch trennzeichen wie \r\n.
-
Hmm, und wie sieht es mit dem Management aus?
Wie kann ein Client mehr oder weniger gleichzeitig senden/empfangen UND der Server auch?
Also ich weiß dass es select() gibt, aber das ist doch auch ein Blocking-Call..
Und das wäre bei Servern wie bei WoW nicht so gut denke ich.Wie macht man sowas?
-
WoW benutzt bestimmt UDP.
-
Und wie sollte man dann sichergehen, dass die Daten auch wirklich angekommen sind?
Dann würden ja bei jedem kleinen Lag 1000e Gegenstände verschwinden -.-
-
Sich selbst drum kümmern. Ausserdem haben die Clienten ja nix mit irgendwelchen Gegenständen zu tun, die müssen sie nur darstellen aber handhaben tut sowas doch sowieso alles der Server. Solche Witze daß der Client dem Server sagt was zu tun ist, findet man höchstens noch bei Ultima Online aber das hat nun auch schon beinahe 10 Jahre auf dem Buckel und war das erste richtige MMORPG.
-
Die parallelität bekommst du, indem du Verbindungen in Threads auslagerst.
Client Server:
-Client Connectet zu Server
-Server erzeugt neuen Thread für die Verbindung (annehmen mit accept => Client Socket)
-tritt eine Veränderung auf, von der alle Clients betroffen sind, werden die Daten an alle Clients ausgegeben.Das ist wirklich nur extrem grob umrissen

Gruss
Michael S.