Hallo erstmal, bin neu hier im Forum
vorerst: ich habe hauptsächlich nur mit Delphi Erfahrung, damit würde ich sagen auch relativ gut aber Lazarus ist für mich noch ein bisschen Neuland.
Nun meine Situation: ich will eine Server-Application auf einem Raspberry laufen lassen, geht leider nicht mit Delphi
daher möchte ich Lazarus benutzen, der Server soll u.a. als Mid-Server fungieren und mehrere Clients sollen mit ihm gleichzeitig
kommunizieren. In Delphi konnte man das mit "DataSnap" lösen, dieser hat automatisch die einzelnen Clients auf Threads aufgeteilt.
Hier stellt sich meine Problematik: Wie sollte ich vorgehen die Clients auf Threads aufzuteilen (dynamisch) damit keine Kollisionen auftreten? Habe da leider echt 0 Ahnung wie ich anfangen soll
Falls es schon Foreneinträge geben sollte die mir hier vllt helfen, bitte gerne Weiterverlinken!
Danke im Voraus und schönes Wochenende!
-Eugeene
Server mit Lazarus (auf Raspberry) (Multi-Sockets?)
-
- Beiträge: 1910
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Server mit Lazarus (auf Raspberry) (Multi-Sockets?)
Da gibt es 2 gängige Modelle, das Worker-Modell, und das Worker-Pool-Modell
Worker Modell:
Im Dispatcher Thread nimmst du die Verbindungen an, erstellst einen neuen Worker Thread, und übergibst die Verarbeitung dann an diese.
Gut für aufwendige Arbeit der Worker Threads
Worker-Pool-Modell:
Es gibt einen Fixen Pool von N Threads, und eine Liste mit den Ausstehenden Anfragen. Der Dispatcher nimmt die Anfragen an, schreibt sie in die Liste und die Worker Threads arbeiten, sobald einer der Worker Threads fertig ist nimmt er sich die nächste Anfrage aus der liste und behandelt diese.
Gut für kurzlebige Threads, wenn die Erstellung und Zerstörung von Threads zu aufwendig wäre.
Link
PS:
Wenn die Threads komplett eigenständig laufen sollen, und kaum/keine IPC nötig ist finde ich fork() einfacher als Threads
Worker Modell:
Im Dispatcher Thread nimmst du die Verbindungen an, erstellst einen neuen Worker Thread, und übergibst die Verarbeitung dann an diese.
Gut für aufwendige Arbeit der Worker Threads
Worker-Pool-Modell:
Es gibt einen Fixen Pool von N Threads, und eine Liste mit den Ausstehenden Anfragen. Der Dispatcher nimmt die Anfragen an, schreibt sie in die Liste und die Worker Threads arbeiten, sobald einer der Worker Threads fertig ist nimmt er sich die nächste Anfrage aus der liste und behandelt diese.
Gut für kurzlebige Threads, wenn die Erstellung und Zerstörung von Threads zu aufwendig wäre.
Link
PS:
Wenn die Threads komplett eigenständig laufen sollen, und kaum/keine IPC nötig ist finde ich fork() einfacher als Threads
Re: Server mit Lazarus (auf Raspberry) (Multi-Sockets?)
Vielen Dank, nach genau so etwas habe ich gesucht!
Schönes Wochenende noch~
Schönes Wochenende noch~