Performance bei CAsyncSocket
-
Hallo Leute, hab folgendes Problem:
Hab ein Multiplayer Spiel über MFC Socket Klassen implementiert.
In der abgeleiteten Klasse habe ich 'On Receive' überschrieben.
Diese Methode ruft eine Methode meiner Dokumentenklasse auf, wo einkommende Nachrichtenpakete empfangen, ausgewertet und verteilt werden.
Jetzt das Problem:Wenn die Applikation mehrere Nachrichten schnell hintereinander oder gleichzeitig empfängt,werden nicht mehr alle Nachrichten ausgewertet.
Es muss darn liegen, dass 'On Receive' aufgerufen wird, während die andere Nachricht noch abgearbeitet wird. Wie kann ich das am besten implementieren?
Ein Spieler kann ja von mehreren Spielern gleichzeigig Informationen über das Netz erhalten...Vielen Dank, wenn ihr mir helfen könnt.

-
soweit mir bekannt ist, werden alle nachrichten, die noch nicht ausgewertet sind in EINEN puffer geschrieben. Somit wenn mehrere nachrichten eintreffen, während die erste noch nicht abgearbeitet wurde, wird beim nächsten mal der gesamte puffer als eine nachricht behandelt. Das problem lösen könntest du, wenn du auf der Sender-Seite ein Delay einfügst (Sleep(...))
und das problem, das gleichzieitg mehrere an einen senden können, kannst du mit einem server lösen, so das alle daten zuerst zu dem müssem.
hoffe das hilft dir
-
Das ist eigentlich immer so da die Applikation keine Daten vom Socket empfängt. Dies sind Kernelfunktionen.
Ein Programm welches Sockets zur Verfügung stellt holt immer nur von Kernel ab und nie direkt von wem auch immer. Sollten Daten eintreffen dann speichert die der Kernel irgendwo. Ein Read ließt dann von Kernel diese Daten aus. IMHO macht dies der TCP/IP-Treiber von Windows der ja die LOWLEVEL-Funktinen bereits stellt. Weiters ist das Senden von daten immer als ganzes zu sehen auch wenn nur teile Ankommen. Ist man bei Windows z.B. unter einem bestimmten Zeitwert zwischen 2 Sendevorgängen dann steht Windows die beiden Nachrichten in eine zusammen und sendet als würde nur einmal send aufgerufen. Da ganze hat auch einen Namen den ich mir aber nicht gemerkt habe.