Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

21.07.2014, 10:04

c++ Socket Select Server/Client

Hey Leute

Habe mittlerweile einen funktionierenden Socket Server der mit Select arbeitet.

Ich wollte nun eigentlich beginnen, ein einfaches Spiel über Tcp zu schreiben, allerdings ist mir aufgefallen, das beim aufruf von der select Funktion, der Client und der Server dort hängen bleiben.

Würde ich also jetzt in mein Spiel die Nachrichtenschleife von Winsock einbinden, so würde auch das Spiel hängen bleiben nicht wahr?


Momentan ist der Server und der Client so aufgebaut, das alles in einer Move Funktion verarbeitet wird, also ungefähr so:

Fd Sets leeren,
FdSets füllen
Aufruf Select
Verarbeiten der Nachrichten vom Server
Senden von Daten

Wenn aber keine Nachrichten vom Server vorliegen, so wartet Select ja.

Wie würdet ihr das ganze jetzt umstellen, oder wird das ganze nicht geblockt ?


Gruß Leri

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

21.07.2014, 11:15

Multi-Threading.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

3

21.07.2014, 11:40

Du kannst auf jeden Fall auch irgendwie abfragen, ob Daten vorliegen. Wenn ich mich recht erinnere, würde man dann select nur dann aufrufen, wenn garantiert ist, dass es nicht blockiert. Die entsprechenden Funktionen müssten in diversen Tutorials stehen.
Multi-Threading ist natürlich irgendwie eleganter, braucht aber auch Einarbeitung und Erfahrung.
Lieber dumm fragen, als dumm bleiben!

4

21.07.2014, 11:46

es gibt die möglichkeit einen timer anzugeben, aber das wird wohl nicht die beste Lösung sein.

Multi Threading wäre eine Idee, müsste ich mir aber erstmal genau anschauen, desweiteren müsste ich aber auch dann sicherstellen, das die momentan zu veränderten Daten dann nicht an anderer Stelle gelesen werden.

5

21.07.2014, 11:50

habe gerade versucht, ein Timer auf 0 zu setzen, der Client geht jetzt durchlaufend die Schleife durch, denke des wäre momentan die beste Lösung.

Mit dem Thema Threads, werde ich wohl noch ein wenig warten, bis ich mehr erfahrung mit der Socket Programmierung habe, aber ich denke auf langer Sicht, werde ich wohl einen eigenen Thread für alle Socket spezifischen Daten verwenden



Ich danke euch, an Threads habe ich noch garnicht gedacht, und daran das select auch einen Wert zurück liefert, wenn keine Daten vorliegen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

21.07.2014, 13:06

Dauerhaftes Polling (also das, was Du da tun willst) würde ich nicht empfehlen. Ich würde weiterhin einen Thread und blocking IO empfehlen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

7

21.07.2014, 14:47

ja des könnt ich mir mal anschauen, gibts irgendwelche bibliotheken für threads dir ihr empfehlen könnten? Z.b die von Boost oder eventuell eine andere, hatte damals probleme boost Threads zu verwenden

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

21.07.2014, 15:06

Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

9

22.07.2014, 20:15

Klar, Polling ist vielleicht nicht die effizienteste Art, aber es ist jetzt auch nicht so, dass die Welt davon untergehen würde. Ich würde fast vorschlagen, es dabei zu belassen, anstatt neben Sockets auch noch Threads als großes neues unbekanntes Thema anzufangen. Bevor man zwei komplizierte Dinge miteinander kombiniert ist es vermutlich einfacher, zuerst beide getrennt verstanden und verinnerlicht zu haben.
Lieber dumm fragen, als dumm bleiben!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

22.07.2014, 22:15

Das hat er doch. Oder meinst Du, dass er über select noch weiter nachdenken und es noch weiter verinnerlichen wird?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige