Prinzip: Server + Client

Anfängerfragen zum Programmieren mit PureBasic.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Prinzip: Server + Client

Beitrag von IronEagle »

Hallo Leute,

ich denke schon seit ein paar Tagen über die korrekte Datenverarbeitung innerhalb einer Server-Client Kommunikation nach.

Ich möchte gern mit mehreren Clients auf einen Server gleichzeitig zugreifen, der dann jedem einzelnen Client seine entsprechenden Daten zurücksendet.

Wie ich es mir bisher gedacht habe:

- Wenn der Server Daten erhält, erstellt dieser einen Thread der die Daten empfängt und in einer Liste abspeichert. Danach wird der Empfangsthread beendet.
- Der Server verarbeitet im Main-Thread die Daten aus der o.g. Liste und erstellt ggf. einen Thread zum Senden von Daten an den entsprechenden Client.
- Wenn ein Client die Verbindung zum Server beendet, wird auch der zugehörige Sendethread beendet.

Ist das eine Sinnvolle Methode oder könnt Ihr mir eine bessere empfehlen?

Vielen Dank an alle die sich die Mühe machen mir zu antworten ;)
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Prinzip: Server + Client

Beitrag von NicTheQuick »

Das mit den Threads ist eine sehr gute Idee und bewährt. Ich würde aber den Thread pro Client so lange laufen lassen wie die Verbindung auch besteht. Die Kommunikation zwischen den Threads muss man dann mit entsprechenden Datenstrukturen machen. Siehe auch Mutex, Semaphore und Co.
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: Prinzip: Server + Client

Beitrag von IronEagle »

Erstmal vielen Dank für deine schnelle Antwort.

Wenn man jetzt allerdings einen Gameserver realisieren möchte, also wo permanent Daten zwischen Clients und Server ausgetauscht werden, ist dann ein Empfangs-Thread sinnvoll oder geht man dann den Weg über einzelne Empfangs-Threads für jeden Client? (Wenn das überhaupt möglich ist)
PureBasic 5.71 | Windows 10 Home (x64)
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Prinzip: Server + Client

Beitrag von TroaX »

Du benötigst dafür immer einen zentralen Thread, der die Verbindungen entgegennimmt. Danach lässt man sich die Client-Identifikation/Verbindungs-Identifikation geben und übergibt diese an die einzelnen Threads. Die Threads übernehmen dann die Kommunikation mit dem Client.

Dein Server soll ja für jeden Spieler unter gleicher IP und Port erreichbar sein. Dazu gibt es nur einen Listener.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
IronEagle
Beiträge: 64
Registriert: 13.10.2012 14:41
Wohnort: Berlin

Re: Prinzip: Server + Client

Beitrag von IronEagle »

OK das habe ich mir auch so gedacht :) Danke für Eure Antworten. :bounce:
PureBasic 5.71 | Windows 10 Home (x64)
Antworten