netzwerkunterstützungs-methode
-
ich hab mir über legt für mein kleines spiel eine Netzwerkunterstützung einzubauen. Jetzt hab ich mich sdlnet beschäftigt.
Nun gibt es aber dass problem, dass meine anwendung durch send und recv zu stark blockiert wird.
Nun gibtes offenbar folgende möglichkeiten zu verhindern, dass mein programm nicht stopp:asynchronität(nicht sicher ob sdlnet dass unterstützt)
mehrere threads starten(aber irgendiwe sagen alle dass das blöd ist)
non blocking(soll irgendwie den prozessor auslasten)
select(geht offenbar irgendwie mit checksocket, is aber sehr kompliziert)wie macht man sowas normalerweise?
-
kann mir wenigstens jemand sagen, ob man ein spiel hinkriegt ohne multithreading auf der clientseite zu verwenden?
-
Wieso willst du kein Multithreading verwenden?
-
ich will doch nur wissen ob Multitreading notwendig ist, oder ob es ein andere Möglichkeit gibt, die man normalerweise verwendet, aber wenn es das nicht gibt, is das völlig okay, schliesslich liefert sdl da ja sogar was mit.
also, ich vermute du meinst das wird auf multitreading beim client rauslaufen?
-
alterbro schrieb:
select(geht offenbar irgendwie mit checksocket, is aber sehr kompliziert)
Das ist kompliziert, aber ein Spiel schreiben ist einfach?
Multi-Threading verschiebt das Problem nur, denn der Haupt-Thread muss ja immer noch durch Pollen feststellen, ob Daten empfangen worden sind.
Also entwederselect
benutzen oder Asio, falls C++.
-
Ja, es geht ohne multithreading. select oder asio sind nicht die einzigen. Alle vorgeschlagenen Loesungen fuehren zum Ziel.
-
also als lib nehm ich sdl_net, und komm ganz gut damit klar.
das problem is nun, dass wenn einer "pollt"(checksockets) muss der andere gerade schreiben, wenn ich das richtig verstanden hab.
also hab ich mir überlegt das ganze netzwerkzeug auf einen anderen thread zu schieben, und check sockets nur auf dem server zu nehmen.
oder wie soll ich das sonst machen?
-
noch eine frage frage:
Wenn ich mit Udp_send etesd sende,blockiert dann die funktion, weil ich meine, udp sendet ja nur und wartet nicht auf antwort?