Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Einfaches Kommunikationsprogramm (https://www.delphipraxis.net/207006-einfaches-kommunikationsprogramm.html)

MechMac666 15. Feb 2021 22:19

Einfaches Kommunikationsprogramm
 
Hallo,

Auf welcher Basis könnte man ein einfaches Kommunikationsprogramm erstellen, welches im Internet funktioniert.
Also irgendwas in der Richtung:
Server -> PHP (DB ist vorhanden)
Client -> Delphi Programm
Nicht öffentlicher Einsatz. Personenkreis ist festgelegt.
Es sollen Textnachrichten versendet werden.

Ich bin mir noch nicht sicher ob eine Art Chat reicht oder ob die Nachrichten auch direkt zu einem Clienten zugestellt werden sollen.
Letzteres wird aber wahrscheinlich zu kompliziert.

Oder ein anderer Ansatz:
Wenn man Nachrichten nicht verpassen möchte, was bietet sich da an? Verschlüsselte Textdateien auf dem Server schreiben wo drin steht für wen sie sind und die Nachricht?

Gruß, Andreas

mytbo 15. Feb 2021 23:30

AW: Einfaches Kommunikationsprogramm
 
Ich bringe mal das Open Source Framework mORMot ins Spiel. mORMot ist von D7 bis 10.4 verfügbar. Den Download findest du hier.
Ein Beispiel für einen Chat findest du hier.

mORMot musst du nicht installierten. Es reicht aus, die entsprechenden Bibliothekspfade einzufügen. Die eigentliche Arbeit ist mit mORMot oft schnell erledigt, das Problem dürfte sein, dich in mORMot einzuarbeiten. Es steht eine ausführliche Hilfe, viele Beispiele und ein freundliches Forum zur Verfügung.

Bis bald...
Thomas

Jumpy 16. Feb 2021 09:38

AW: Einfaches Kommunikationsprogramm
 
Willst du das unbedingt selber schreiben? Es gibt da bestimmt auch schon viel Fertiges?

Rollo62 16. Feb 2021 21:08

AW: Einfaches Kommunikationsprogramm
 
Ich würde da was auf Basis Headless CMS Cockpit empfehlen.
Ist sehr schlank, und nimmt Dir die Basiskonfigurationen im Backend schon ab.
Da lässt sich dann per REST-Schnittstelle leicht drauf zugreifen und notfalls erweitern.
Ein Messaging-System ist erstmal nicht drin, soweit ich weiss, könnte aber sicher erweitert werden, falls nötig.

MechMac666 17. Feb 2021 22:06

AW: Einfaches Kommunikationsprogramm
 
Danke für die Antworten.
Ich werde mir die Sachen mal ansehen.

Grundsätzlich will ich nicht alles selber machen,
wenn ich mir dadurch Arbeit spare nehme ich auch gern was fertiges.

Meine Gedanken gingen zuletzt auf den Verzicht von Live-Chat zugunsten einer Messaging Funktion.
Dies könnte im einfachsten Fall mit Textdateien oder bequemer über eine DB gemacht werden.
Ich sehe es nur problematisch das ich die Clienten doch nicht im Minutentakt entweder auf Files im Web oder SQL-Abfragen pollen kann.
Oder bin ich da zu "empfindlich"?
Die Clienten wissen ja sonst nicht das etwas "zum abholen" für sie bereit steht.

Oder aber man nimmt den Server nur zur Vermittlung, aber ich wüßte gerade beim besten Willen nicht wie zwei oder mehr Applikationen über TCP außerhalb des eigenen Netztes kommunizieren können. (Port-Weiterleitung am Router ausgenommen)

Klaus01 18. Feb 2021 09:25

AW: Einfaches Kommunikationsprogramm
 
.. wenn sich eine Client mit dem Server über TCP verbunden hat,
dann besteht eine bidirektionale Verbindung.
Sendet ein Client etwas neues - dann kann der Server die Liste der
verbundenen Clients abarbeiten und die Clients mit den Neuigkeiten updaten.

Grüße
Klaus

Mavarik 18. Feb 2021 16:24

AW: Einfaches Kommunikationsprogramm
 
Oder WebSockets...

MechMac666 21. Feb 2021 20:29

AW: Einfaches Kommunikationsprogramm
 
Hm, WebSockets funktionieren nicht.
Also sowas: "socket_create(..."

Ich hatte mal nach TCP gesucht, aber irgendwie lande ich immer bei der o.g. Sache.
Gibts da noch etwas anderes?

Könnte jemand seine Gedanken zu der "Datenbank-Geschichte" teilen? -Hinsichtlich einer Abfragefrequenz von 1 min.

mytbo 21. Feb 2021 21:00

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von MechMac666 (Beitrag 1483457)
Gibts da noch etwas anderes?

Wenn du meiner Empfehlung aus dem zweiten Post folgst, hast du eine Lösung mit WebSockets in enterprise-quality.

Bis bald...
Thomas

mschaefer 21. Feb 2021 21:15

AW: Einfaches Kommunikationsprogramm
 
Auf SourceForge gibt es das DBBetAdapter Projekt. Ist zwar für Lazarus entwickelt, hat aber auch die dpk Files dabei.

MechMac666 22. Feb 2021 08:26

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von mytbo (Beitrag 1483458)
Zitat:

Zitat von MechMac666 (Beitrag 1483457)
Gibts da noch etwas anderes?

Wenn du meiner Empfehlung aus dem zweiten Post folgst, hast du eine Lösung mit WebSockets in enterprise-quality.

So, ich habe das mal getestet. Das Problem ist hierbei das man einen Server braucht.
Also einen wo man selbst bestimmen darf was drauf laufen soll.
Selbst wenn ich mir dafür extra einen Computer kaufe, kenne ich ja immer noch nicht die IP Adresse von dem Ding. (Zumindest nicht wenn die Verbindung neu hergestellt wurde)
Dyn DNS habe ich letztens gekündigt, da zu teuer.



EDIT: Ich habe mir jetzt nen Mini-PC bestellt und nutze das Dyn DNS der Fritz box. Damit werde ich mal weiter probieren...

mschaefer 22. Feb 2021 09:03

AW: Einfaches Kommunikationsprogramm
 
Mir fallen dann noch 2 Möglichkeiten ein:

A. Du hast eine Webseite mit Datenbank

Du greifst per PHP Tunnel auf die Datenbank zu und alle Sicherheitsaspekte löst Du über die Datenbank
PHP-Tunnel via MySql von Andreas
B. Du hast eine Webseite mit FTP

Der Server hat FTP-Zugriff und dieser veröffentlicht seine IP auf der Seite für das Lesen von den Clients.
Danach bauen die Clients eine direkte Verbindung zum Server auf, Dein lokaler PC, über eine Port den Du am
Router freigeben hast. Wenn Du dann die IP hast kannst Du auch das Enterprise-Beispiel nehmen.

MechMac666 22. Feb 2021 10:27

AW: Einfaches Kommunikationsprogramm
 
Zu dem mORMot habe ich gerade feststellen müssen das der WebSocket Kram offensichtlich nicht für Android einsetzbar ist.
Es scheitert schon an den Units selbst, ohne das ich irgendetwas programmiert hätte.

Leider ist bei Delphi selbst auch nix dabei (FMX).
Ich suche mal weiter.

Beach 22. Feb 2021 12:12

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von MechMac666 (Beitrag 1483483)
[...]
Dyn DNS habe ich letztens gekündigt, da zu teuer.
[...]

Vielleicht auch ne Alternative:
https://selfhost.de/cgi-bin/selfhost?p=cms&article=free

mytbo 22. Feb 2021 12:28

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von MechMac666 (Beitrag 1483491)
Zu dem mORMot habe ich gerade feststellen müssen das der WebSocket Kram offensichtlich nicht für Android einsetzbar ist.

In deinem Eingangspost stand nichts von Android sondern nur Delphi Programm.

Im Verzeichnis CrossPlatform liegen Units, die laut Beschreibung mit "compile with Delphi for any platform (including NextGen for mobiles), with FPC 2.7 or Kylix, and with SmartMobileStudio 2.1.1". Die WebSocket Unterstützung in den CrossPlatform Units wird nicht erwähnt.

Wenn du auf dem Client WebSocket nutzen willst, dann kannst du die WebApp auch mit TMS WebCore schreiben. Da gibt es eine TWebSocketClient Klasse. SmartMobileStudio hat auch eine TW3WebSocket Klasse. Auch in Lazarus gibt es Unterstützung für Websockets. Damit sollte Android möglich sein. Ich habe angefangen für WebApps TMS WebCore zu nehmen, oder kämpfe mit JavaSript.

Wenn dein Budget sehr knapp ist, mache folgendes: Besorge dir einen VServer Linux bei einem Provider deines Vertrauens, z.B. Webtropia, für 2,0 EUR/Monat, dann hast du deine eigene IPv4 Adresse. Compiliere den Server mit FPC. FPC, Lazarus ID und mORMot lassen sich sehr einfach mit FPCUpDeluxe installieren. Genaue Beschreibung in der mORMot Hilfe.

Bis bald...
Thomas

MechMac666 23. Feb 2021 10:35

AW: Einfaches Kommunikationsprogramm
 
Ich habe gerade mal versucht den mORMot Client mit http://www.websocket.org/echo.html zu verbinden.
Das klappt nicht. Es scheint eine völlig andere "Technik" dahinter zu stecken.
Auch andere Versuche waren erfolglos.
Dieses mORMot kann man wohl nur mit mORMot verwenden.
Allein folgendes "Client.WebSocketsUpgrade(PROJECT31_TRANSMISSION_K EY)"
habe ich in keinem php, Java oder sonst was für Scripten finden können. Da ist nie die Rede von einem Key.

Ich hätte sonst versucht für die Android Geschichte ein php Script auf einem Server zwischen zu schalten.
Oder auch INDY Lösungen (Clienten) habe ich schon gesehen, aber all das nützt ja nix wenn es nicht kompatibel zum mORMot Server ist...

mytbo 23. Feb 2021 14:32

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von MechMac666 (Beitrag 1483561)
Dieses mORMot kann man wohl nur mit mORMot verwenden.
Allein folgendes "Client.WebSocketsUpgrade(PROJECT31_TRANSMISSION_K EY)"

mORMot kann nicht nur mit sich selbst kommunizieren, verwendet aber als Default oft optimierte Einstellungen für die interne Nutzung.

Die Beschreibung zur Funktion WebSocketsUpgrade() der verwendeten Klasse erklärt dein Problem. In der Hilfe steht folgendes:
Code:
/// upgrade the HTTP client connection to a specified WebSockets protocol
// - the Model.Root URI will be used for upgrade
// - if aWebSocketsAJAX equals default FALSE, it will use 'synopsebinary'
// i.e. TWebSocketProtocolBinaryprotocol, with AES-CFB 256 bits encryption
// if the encryption key text is not '' and optional SynLZ compression
// - if aWebSocketsAJAX is TRUE, it will register the slower and less secure
// 'synopsejson' mode, i.e. TWebSocketProtocolJSON (to be used for AJAX
// debugging/test purposes only)
// and aWebSocketsEncryptionKey/aWebSocketsCompression parameters won't be used
// - once upgraded, the client would automatically re-upgrade any new
// HTTP client link on automatic reconnection, so that use of this class
// should be not tied to a particular TCP/IP socket - use OnWebsocketsUpgraded
// event to perform any needed initialization set, e.g. SOA real-time
// callbacks registration
// - will return '' on success, or an error message on failure
Die Beschreibung findest du in der Unit mORMotHttpClient oder der Hilfe. Suche einfach im mORMot Quelltext nach WebSocketsUpgrade() und lese die Hilfe zu den einzelnen Implementierungen. Die Hilfe ist umfangreich und beschreibt vieles sehr ausführlich.

Einen Blog Artikel über die Verwendung von WebSockets in TMS WebCore habe ich hier gefunden. Vielleicht hilft es dir weiter.

Bis bald...
Thomas

stahli 23. Feb 2021 18:19

AW: Einfaches Kommunikationsprogramm
 
@MechMac666

Ich habe mal so eine asynchrone Kommunikation für einen Server und mehrere Clients gebaut: https://www.delphipraxis.net/190482-...ockettest.html
Das wird für Dich nicht so ganz passen, aber vielleicht ist es mal interessant zum durchstöbern.

Gerade habe ich das mal in einem anderen Projekt eingesetzt, das ging wirklich total easy...
Zum probieren wäre das vielleicht mal möglich...

MechMac666 23. Feb 2021 22:38

AW: Einfaches Kommunikationsprogramm
 
@Stahli
Vielen Dank dafür. Ich werde es mir ansehen.

Was das andere Betrifft:
Ich habe gemäß der Beschreibung den Key und die Kompression aus WebSocketsUpgrade() im Client herausgenommen.
Dennoch konnte ich nicht mit dem Echo-Server verbinden.
Auch in die andere Richtung war es erfolglos:
Der Versuch Browser-basierte WebSocket Clienten mit dem ChatServer zu verbinden.
Ich habe unzählige Versuche getätigt. Kein PHP bzw. Javascript basierter WebSocket Client konnte sich mit dem ChatServer verbinden.
Im Server habe ich auch den Key leer gelassen und Kompression deaktiviert. (Auch dieses Ajax hatte ich mal raus, hat aber nichts gebracht)

MechMac666 25. Feb 2021 18:31

AW: Einfaches Kommunikationsprogramm
 
Ich habe nun eine halbwegs brauchbare Lösung gefunden.
Die Demo31 (EchoServer) lässt sich als chat umbauen. Sie ist mit den WebSockets eines Browsers kompatibel.
Als Windows Client ist leider nichts in dem Paket dabei, aber ich habe in den weiten des Webs etwas auf Indy Basis gefunden.
Unter "IdWebSocketSimpleClient" wird man fündig.
Damit konnte ich den EchoServer erreichen.

Ob letzteres unter Android läuft weiß ich nicht, aber im "Notfall" geht dann der Browser.

mytbo 25. Feb 2021 19:08

AW: Einfaches Kommunikationsprogramm
 
Zitat:

Zitat von MechMac666 (Beitrag 1483850)
Ich habe nun eine halbwegs brauchbare Lösung gefunden.

Freut mich zu lesen. Im Demo31 Verzeichnis ist auch eine HTML-Datei die Beispiel JavaScript Quelltext enthält. Außerdem möchte ich dich noch mal auf den Blog Artikel über die Verwendung von WebSockets in TMS WebCore hinweisen. Mit TMS WebCore kannst du PWAs erzeugen lassen. Könnte für deine Zwecke ausreichend sein.

Bis bald...
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf