peer2peer TCP/IP Protokoll

Zur Vorstellung von Komponenten und Units für Lazarus
maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Seit gestern steht auf

https://www.tml-software.com

eine Bibliothek zum Download bereit, die die meiste Aufgaben bei der Implementierung von Netzwerkkommunikation erheblich vereinfacht.
  • Aufruf entfernter Funktionen (remote procedure call)
  • Senden von Statusinformationen bei der Ausführung von Kommandos (z.B. Progress)
  • Verarbeitung in mehreren Threads
  • Senden von Ereignissen
  • Load balancing von Kommando Aufrufen
Da eine wichtige Aufgabe bei der Plattformunabhängigen Netzwerkkommunikation die Darstellung der Daten ist, liefert die Bibliothek auch dafür eine Lösung. Ein eigener Variant typ bietet die Möglichkeit Daten typsicher zu verarbeiten. Um auch komplexe Datenstrukturen zu ermöglichen sind container Typen wie Listen, Dictionaries und Tabellen vorhanden, die auch verschachtelt werden können. Das Datenformat (SIDEX) kann auch ohne die Netzwerkfunktionalität (TML) verwendet werden, um z.B. Parameterdateien zu verwalten oder die Daten über einen anderen Weg zu verschicken.

Beispiel für die Verwendung eines Dictionaries:

Code: Alles auswählen

value := VarSidexDictCreate;
VarSidexDictSet(value,'aNumber',42);
VarSidexDictSet(value,'aString','simplicity');
VarSidexDictSet(value,'aTime',now)

Die Komponenten stehen für Lazarus (LCL), Delpi/C++ Builder (VCL) zur Verfügung. Ein natives C interface ermöglicht die Verwendung der Bibliothek in weiteren Sprachen.
Da Netzwerkkommunikation in der Regel nicht auf eine Plattform beschränkt ist, werden zur Zeit OS-X, Linux und Windows unterstützt.

Die Komponenten und die Bibliothek sind kommerziell, jedoch preislich auch für kleine Projekte interessant.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: peer2peer TCP/IP Protokoll

Beitrag von mschnell »

Wir verwenden set vielen Jahren sehr erfolgreich "RemObjects SDK" für $399.-

Scheint eine ganz ähnliche Zielsetzung zu haben.

Lazarus wurde von der Firma früher offiziell unterstützt, ich glaube heute ist das nicht mehr "offiziell".

-Michael

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Michael,

danke für den Hinweis. "RemObjects SDK" scheint tatsächlich eine ähnliche Zielsetzung zu haben. Ein Unterschied scheint die Client/Server Architektur zu sein. TML ist strikt Peer to Peer. So etwas wie Clients und Server gibt es nicht. Das darunter liegende Protokoll ist BEEP (RFC3080,RFC3081), welches einen bereits fertigen (standardisierten) Protokollbaukasten darstellt, macht diese Art der Kommunikation möglich. TML ist lediglich eine mögliche Anwendung von BEEP.
Beim Datenlayer geht TML eigene Wege. Das Ziel ist eine möglichst einfache jedoch typsichere Datenstruktur zur Verfügung zu stellen, die bei Bedarf auch z.B. SOAP Daten enthalten kann.

Wir verwenden TML/SIDEX seit ca. 1 1/2 Jahren in einem Projekt mit lang laufenden und performance hungrigen Befehlen, bei denen ein Load Balancing unerlässlich ist. Bei der Entscheidung welches SDK wir für die Netzwerkkommunikation verwenden, wahren alle Client/Server basierten Protokolle von vornherein entweder ungeeignet oder zu schwer dazu zu bewegen sich wie ein Peer to Peer Protokoll zu verhalten. Ein kompromissloses Multithreading bei der Ausführung von Kommandos war uns ebenfalls wichtig. Auch dieses haben wir in anderen Bibliotheken vermisst.

Unterschiedlich ist auch, dass "RemObjects SDK" native Implementierungen zur Verfügung stellt. Dagegen befindet sich der Kern von TML/SIDEX in dynamischen Bibliotheken (dll,so). Ein einfach gehaltenes C Interface erleichtert die Verwendung in anderen Sprachen. Die in der Distribution enthaltenen Sprachanbindungen sind, was die Delphi/Lazarus Komponenten betrifft als Sourcecode enthalten.

Da ich "RemObjects SDK" nicht so gut kenne, würde ich mich über deine Einschätzung bzgl. der Unterschiede freuen.

Maik

Beispiel für ein SIDEX Dokument (simple data exchange format):

Code: Alles auswählen

    <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
    <SIDEX_DEMO>
     <TestValues>
         <Number type='int'>42</Number>
         <Text type='string' encode='raw'>thanks for the fish</Text>
         <YesOrNo type='bool'>0</YesOrNo>
         <Price type='float'>12.400000</Price>
         <Dictionary type='dict'>
             <Key_0 type='string' encode='raw'>Price</Key_0>
             <Value_0 type='float'>12.400000</Value_0>
             <Key_1 type='string' encode='raw'>YesOrNo</Key_1>
             <Value_1 type='bool'>0</Value_1>
             <Key_2 type='string' encode='raw'>Number</Key_2>
             <Value_2 type='int'>42</Value_2>
             <Key_3 type='string' encode='raw'>Binary</Key_3>
             <Value_3 type='binary' encode='base64'>MTIzNAA=</Value_3>
             <Key_4 type='string' encode='raw'>Text</Key_4>
             <Value_4 type='string' encode='raw'>thanks for the fish</Value_4>
         </Dictionary> 
     </TestValues>
    </SIDEX_DEMO>

grl
Beiträge: 36
Registriert: Fr 17. Okt 2008, 19:24
OS, Lazarus, FPC: Debian X64, Lazarus 1.1, FPC 2.7.1
CPU-Target: x86, ARM

Re: peer2peer TCP/IP Protokoll

Beitrag von grl »

maik.tml hat geschrieben:Die Komponenten und die Bibliothek sind kommerziell, jedoch preislich auch für kleine Projekte interessant.


Irgendwie gibt die Seite nicht wirklich viel Info her - aber wenn ich das richtig verstanden habe gibts das ganze als .so oder .dll ohne Quellcode und kostet - wenn man's denn für Linux+Win+OSx haben will 1300,- EUR.

Auch wenn das ganze sehr interessant klingt - eine für ein Projekt so essentielle Library ohne Quellcode kommt mir nicht ins Haus und 1300,- ist für "kleine Projekte" ein ganzer Haufen Geld.

Nur so meine Überlegungen zum Thema,

GRL

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Hallo GRL,

Mir ist aus meinen eigenen Projekten die Frage mit dem Quellcode bekannt. Es hat sich jedoch als zeit- und geldsparender herausgestellt ab und an einem Anbieter einer Bibliothek ohne Quellcode zu vertrauen, da ohnehin die Resourcen sich in dessen Quellcode einzuarbeiten nicht vorhanden waren. Wichtig ist dabei natürlich, dass es einen aktiven und kompetenten Support gibt. Der Preis der Bibliothek berechtigt zu einem Jahr Support durch unser Entwicklungsteam. Während der Testphase oder nach Ablauf der Supportzeit steht das Forum zur Verfügung.
Wir liefern die language bindings darüber hinaus mit Quellcode aus. Lediglich der Quellcode der dll/so wird nicht beigelegt. Nur so ist der Preis für die Bibliothek zu rechtfertigen. Was nun den Preis betrifft haben wir kommerzielle Projekte im Sinn. Selbst bei Standardaufgaben kann man sich beim Thema Netzerkkommunikation schnell verzetteln. Wenn ein Entwickler statt einer Woche 2 Tage für die Implementierung benötigt und dabei auch noch Funktionen mitgeliefert bekommt, die ihm das Leben in einem wachsenden Projekt erleichtern, hat sich die Investition bereits gelohnt.

Was den Inhalt der Webseite betrifft, möchte ungern an dieser Stelle darüber diskutieren. Ich würde micht jedoch freuen, wenn Du deine Ideen dazu in unserem Forum mitteilst oder sie per eMail schickst. Wie Du vielleicht festgestellt hast, sind wir erst seit gestern online und für Anregungen offen.

Viele Grüße,
Maik

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Ein weiteres Produkt zum Thema Netzwerkkommunikation zu begründen oder abzugrenzen zu anderen ist nicht leicht. Hier also ein Versuch genau das zu tun
https://www.tml-software.com/knowledgebase/kb/article/1/82/

Maik

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: peer2peer TCP/IP Protokoll

Beitrag von Christian »

Och nö, eh ich mir das übersetz nehm ich doch leiber weiter synapse,lnet und indy die alle frei und kostenlos sind.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Christian,
TML/SIDEX ist keine Implementierung von Standardprotokollen. Da würde ich ebenfalls die von Dir genannten Produkte verwenden. TML/SIDEX bietet eine Lösungen für Probleme, bei denen die von Dir genannten Produkte nicht weiter führen oder zuviel Aufwand bedeuten.
Maik

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: peer2peer TCP/IP Protokoll

Beitrag von Christian »

kannst du das etwas genauer beschreiben ?
ich bin bisher weder an Grenzen gestoßen noch war etwas zu implementierne zuviel Aufwand.
Genau deswegen dacht ich das zuletzt verlinkte Dokument ist nun der Stein der Weisen der mir endlich erklärt was das Produkt kann.
Das einzige was ich da sehe was die freien Bibliotheken nicht mitbringen ist in mehreren Threads arbeiten und das ist pro Thread mit schätzungweise 15 Zeilen Code extra implementiert.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Christian,
Die Bibliotheken die Du genannt hast implementieren Standardprotokolle. In der Regel sind dies Client Server Protokolle wie FTP, SMTP, usw. Will man ein gleichberechtigte Kommunikation aufbauen, muss immer auf beiden Seiten ein Client und ein Server implementiert werden. TML ist ein Peer To Peer Protokoll, was erstmal nur bedeutet, dass die Kommunikation in beide Richtungen stattfindet, ohne dass eine weitere Verbindung aufgebaut werden muss. So etwas wie einen Call (z.B. wie bei RPC), der nicht nur eine, sondern mehrere Antworten zurück schickt, war ohne Tricks nicht machbar. Weitere Funktionen von TML sind Loadbalancing und Ereignisse.
Sind die Daten die ausgetauscht werden sollen sehr komplex, stößt man ebenfalls schnell an Grenzen. Daher haben wir auch SIDEX dazu entwickelt. TML ist der Transportlayer und SIDEX der Datenlayer.
Alles in allem haben wir einen großen Aufwand betrieben, um die Kommunikation störungsfrei zu implementieren, bevor wir TML/SIDEX hatten.
Das ganze ist auf geringen Speicherverbrauch und Performance getrimmt, da wir in schneller Folge sehr viele Kommandos verarbeiten mussten.
Ich verstehe Dich so, dass Du gar kein Problem bei der Implementierung Deiner Netzwerkkommunikation hast. Darf ich Fragen worum es sich dabei handelt ? Vielleicht kann ich an einem Beispiel das Du kennst besser erklären ob/wie TML/SIDEX von Nutzen sein kann.
Maik

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: peer2peer TCP/IP Protokoll

Beitrag von Christian »

Ich hab bisher eigentlich immer klassische Client/Server kommunikation implementiert. Mag sein das ich euren Problemfall noch nicht hatte.
gerad hab ich nen IMAP Server auf LNet basis hochgezogen
davor NNTP
dann noch diverse Webservices auf HTTP basis.
zwischendurch ne Debugschnittstelle für Chrom(e)(ium) über Websockets das dürfte am ehesten der Geschichte entsprechen die ihr da habt ja ?!
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

Christian,
Die Projekte, die Dich am häufigsten beschäftigen basieren auf Standardprotokollen und sind reine Client/Server Anwendungen. Damit ergeben sich für Dich die Probleme nicht, die TML/SIDEX löst. Die Websockets Schnittstelle geht in der Tat am ehesten in diese Richtung.
Wir implementieren z.B.
  • Oberflächen für Dienste via localhost. Praktisch nebenbei sind diese dann auch noch remote administrierbar ;-)
  • Fehrnsteuerung von GUI Anwendungen durch andere Systeme zur Integration.
  • Serverprozesse, die umfangreiche Bildbearbeitung durchführen (loadbalancing)
  • middle tier Prozesse, die Datenbankzugriffe abkoppeln und via Events über Datenänderungen informieren
Ich habe noch ein Zitat aus einer eMail Diskussion, das es eigentlich ganz gut trifft.
Sooner or later, someone would have to write something like BEEP/Vortex if you only have TCP, and, sooner or later, someone would have to write something like TML/SIDEX if you only have BEEP/Vortex.

Wenn man bei seinen Überlegungen zur Implementierung einer Netzwerkkommunikation bei einem TCP/IP Socket angekommen ist, sollte man zumindest einmal über TML/SIDEX nachdenken.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: peer2peer TCP/IP Protokoll

Beitrag von mschnell »

maik.tml hat geschrieben:[*]Oberflächen für Dienste via localhost.
[*]Fernsteuerung von GUI Anwendungen durch andere Systeme zur Integration.


Kann die Library tatsächlich die normale Lazarus GUI "remoten" ?

Will sagen: man kann ein normales lauffähiges und getestetes Lazarus Programm mit per LCL designter GUI Benutzer-Oberfläche hernehmen, die Bibliothek einbauen und sich dann via TCP/IP die GUI dieses Programms (annähernd) 1:1 auf einen anderen Rechner - auf dem eine passende komplementäre Anwendung läuft - holen ? Und das, ohne dass - wie bei VNC o.ä. - durch Bildschirm-auslesen und Pixelweise Übertragung ein irrer Overhead notwendig ist.

Gruß

maik.tml
Beiträge: 12
Registriert: Mi 8. Jan 2014, 10:27

Re: peer2peer TCP/IP Protokoll

Beitrag von maik.tml »

mschnell,
Da TML/SIDEX eine bidirektionale Netwerkkommunikation ermöglicht, lässt sich eine "remote GUI" recht leicht implementieren. Das Beispiel in meinem Video auf der tml-software homepage zeigt, wie ich mit einem Slider einen Progressbar steuere. Das Beispiel ist zugegeben sehr simpel aber geht in die Richtung.
Es müssten entsprechende Kommandos implementiert werden, um Änderungen zu übertragen und/oder aktuelle Werte auszulesen. Bei bestehenden Anwendungen würde man einfach die Komponente wie in meinem Video hinzufügen, ein Profil mit entsprechenden Befehlen schreiben und könnte dann eine Remote GUI programmieren. Da sich mit SIDEX auch komplexe Strukturen leicht abbilden lassen, könnte man z.B. ein Kommando schreiben, das alle Komponentenzustände in einem Aufruf liefert. TML ist sehr performant und benötigt einen geringen overhead. Damit ist auch über eine relativ langsame Verbindung eine flüssige Bedienung möglich.
Die remote GUI müsste ebenfalls Änderungen der lokalen GUI empfangen und darstellen können. Da, wie gesagt, TML bidirektional funktioniert, wäre dies ohne ein zusätzliche Verbindung machbar.
Maik

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: peer2peer TCP/IP Protokoll

Beitrag von mschnell »

Klar könnte man irgendetwas implementieren, das die Library nutzt, um irgendetwas zu übertragen.

Ich meinte hier eine mit dem Lazarus GUI Designer erstellte Oberfläche zu remoten, ohne dass dafür zusätzlicher User-Code implementiert werden müsste. (So könnte man die obige Beschreibung der Library lesen.)

Bei mse gibt es "mse-ifi" für diesen Zweck.

-Michael

Antworten