Christian hat geschrieben:Die genannten Funktionen sind alle zur Synchronisation mit einer GUI gedacht.
Unsinn

(Thread-to-Mainthread Signalling ist beispielsweise bei der Arbeit mit seriellen und TCP/IP-Schnittstellen
sehr hilfreich, um die diversen inputs in einem Thread (eben dem Mainthread) zusammenzuführen.) TThread.Queue und TThread.Synchronize sind auch nicht in der LCL, sondern in der fpc-RTL realisiert. Man kann sie also auch komplett ohne lcl oder eben mit einem (neu zu erstellenden) "aktiven" Widget-Type ohne lokale GUI Anbindung verwenden.
Hast Du noch nie embedded Applikationen gemacht, die unbeobachtet (also ohne GUI) vor sich hin laufen ? Die brauchen Timing, warten gleichzeitig auf jede Menge externe Events von irgendwelcher Hardware, auf serielle Schnittstellen, TCP/IP, ... (Meine Kollegen machen das mit Delphi auf Windows , u.a. weil genau das beschriebene mit Lazarus auf Linux nicht geht - und man mit mse nicht so leicht den bestehenden Delphi-Code verwenden kann. )
Christian hat geschrieben:Du brauchst wenn du nen Server Dienst schreibst keine GUI.
Auch Unsinn
Stimmt für ein traditionelles CGI. Aber gerade WebSockets bietet dem Dienst ja die Möglichkeit, im Browser eine GUI zu zeigen.
Christian hat geschrieben:Wie kommst du darauf das sich Websockets anders verhalten als ein CGI sonst ?
Müssen sie nicht,
können sie aber (und das ist das was mich hier interessiert).
Wenn ein "Dienst" in der Lage ist, von sich aus Meldungen an den Browser abzusetzen (das ist ja der Sinn von Websocket und den diversen "Comet" Abkömmlingen), kann der Dienst eine längere Zeit autark diverse Sachen machen (u.a. auch auf irgendwelche Ereignisse reagieren, die nicht vom Browser aus initiiert werden). Ein klassisches CGI wird durch den HTTP-Server auf Veranlassung des Browsers gestartet, generiert irgendwelche anzuzeigenden Daten , gibt die an den HTTP-Server, der sie dann an den Browser weiterleitet. Ganz klassisch tut der Webserver das definitiv erst, wenn das CGI sich beendet hat (da gibt es aber Möglichkeiten). Bei FastCGI (und Apache-Modulen und ISAPI-DLLs) kann das CGI auch laufen, wenn nicht gerade ein Browser-Connekt offen ist. Comet hält den Bowser-Connect halb-legal offen, um spontane Meldungen (effizienter als mit Java-Polling) ausgeben zu können. Websocket bietet da anscheinend noch weitgehendere und vor allem "legale" Möglichkeiten. Mit FCGI und ISAPI ist es möglich, dass das "CGI" permanent läuft (also ein "embedded" Dienst ist), und erst dann mit einem Browser kommuniziert, wenn der einen Request an das CGI absetzt. Dadurch kann man einem embedded Progamm eine Web-basierte Oberfläche geben. Das ist bei in C programmierten Gadgets (Router, NAS, ..., aber auch bei "normalen" Dienste wie VMWare) inzwischen völlig üblich, scheint mir aber im Vergleich zu Lazarus-Programmierung ziemlich aufwändig zu bauen zu sein. Es wäre schön, wenn Lazarus dafür (optionale remote-GUI) eine Unterstützung "Out of the Box" bieten würde. (mse hat dafür zumindest gewisse Möglichkeiten. ) (Die genannten Beispiele haben meist einen eingebauten Webserver, aber auch Verwendung "hinter" einem Webserver ist bei Applikationen sinnvoll, die z.B. im Internet "veröffentlicht" werden sollen - wie die meiner Kollegen.)
-Michael