Protokoll für komplexe Kommunikation
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Protokoll für komplexe Kommunikation
Ich betreibe Datenaustausch per TCP/IP (Synapse). Verschickt wird zurzeit ein String, bei dem das erste Zeichen für die Art des Inhalts steht (mittlerweile 20 verschiedene Sachen), dann Sender und Empfänger kommen und zuletzt ein String mit dem Inhalt der Nachricht. Dieser String wird entweder einfach komplett genutzt (Chat), per pos/copy zerlegt oder auch als DelimitedText verarbeitet. Das funktioniert, scheint mir aber nicht flexibel genug. Jetzt überlege ich, ob alle Daten als XMLDocument ausgetauscht werden sollten. Ist das sinnvoll oder gibt es eine einfachere Lösung?
-
- 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: Protokoll für komplexe Kommunikation
Natürlich gibt es Hunderte verschiedene Lösungen.
Ein offizieller Standard ist "SOAP", der XML verwendet. Im allgemeinen wird dann auch noch HTTP als Zwischenschicht eingebaut, was die Sache natürlich sehr universell macht, aber auch sehr viel Overhead erzeugt.
Wenn Du etwas Geld ausgeben willst, könntest Du den RemOBJ SDK verwenden (eigentlich für Delphi, ist aber vom Hersteller auch auf FPC getestet). Hier wird kann man beliebige Funktionen deklarieren, die jeweils von einem Kommunikationspartner aufgerufen werden und dann beim anderen ablaufen ("RPC" = "remote procedure call"). Das ist sehr praktisch verwendbar und der User merkt von der darunter liegenden Kommunikations-Implementierung nichts. Als Kommunikations-Implementierungen werden u.a SOAP auf HTTP und "proprietär und komprimiert" auf TCP/IP angeboten (aber auch Windows Messages und vieles andere mehr.
RPC kann man natürlich auch zu Fuß implementieren.
Gruß,
-Michael
Ein offizieller Standard ist "SOAP", der XML verwendet. Im allgemeinen wird dann auch noch HTTP als Zwischenschicht eingebaut, was die Sache natürlich sehr universell macht, aber auch sehr viel Overhead erzeugt.
Wenn Du etwas Geld ausgeben willst, könntest Du den RemOBJ SDK verwenden (eigentlich für Delphi, ist aber vom Hersteller auch auf FPC getestet). Hier wird kann man beliebige Funktionen deklarieren, die jeweils von einem Kommunikationspartner aufgerufen werden und dann beim anderen ablaufen ("RPC" = "remote procedure call"). Das ist sehr praktisch verwendbar und der User merkt von der darunter liegenden Kommunikations-Implementierung nichts. Als Kommunikations-Implementierungen werden u.a SOAP auf HTTP und "proprietär und komprimiert" auf TCP/IP angeboten (aber auch Windows Messages und vieles andere mehr.
RPC kann man natürlich auch zu Fuß implementieren.
Gruß,
-Michael
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Wenn ich mir die 1000 Methoden für XML ansehe, scheint mir schon das recht übertrieben. Am liebsten wäre mir eine Art Inifile:
Code: Alles auswählen
case Msg.ReadString('Kind','') of
nwChat:ShowMessage(Msg.ReadString('Chat',' '));//'' -> You don't have permission to access /posting.php on this server.
nwPlayerCount:NumberOfPlayer:=Msg.ReadInteger('NumberOfPlayers',0));
end;
Re: Protokoll für komplexe Kommunikation
Meinst du sowas?
viewtopic.php?p=2108#p2108
viewtopic.php?p=2108#p2108
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2641
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Ganz klar: JSON und REST.
JSON ist ein Datenformat mit dem auch komplexe Strukturen wie Arrays und Objekte serialisiert werden können, REST eine Architekturart für verteile Anwendungen. Mit HTTP als Unterbau ist das alles recht einfach. Dafür würde ich dann Synapse einsetzen.
Wenn du genaueres wissen willst, sag einfach Bescheid.
Micha
JSON ist ein Datenformat mit dem auch komplexe Strukturen wie Arrays und Objekte serialisiert werden können, REST eine Architekturart für verteile Anwendungen. Mit HTTP als Unterbau ist das alles recht einfach. Dafür würde ich dann Synapse einsetzen.
Wenn du genaueres wissen willst, sag einfach Bescheid.
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
JSON klingt gut und ist wahrscheinlich auch ähnlich theos Empfehlung. In den Quellen und Beispielen von fpjson gibt es ausreichend Hinweise, wie man schreibt und liest, aber was mir fehlt, ist eine Möglichkeit, das komplette Objekt zu verschicken.
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2641
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Scotty hat geschrieben:JSON klingt gut und ist wahrscheinlich auch ähnlich theos Empfehlung. In den Quellen und Beispielen von fpjson gibt es ausreichend Hinweise, wie man schreibt und liest, aber was mir fehlt, ist eine Möglichkeit, das komplette Objekt zu verschicken.
Verschicken machst dann mit Synapse. Einfach die Funktion AsJSON deines TJSONObject aufrufen und du bekommst einen String, der den JSON-Code enthält. Diesen String dann per HTTP-POST an den Server weiterreichen und fertig. Der nimmt den entgegen, dekodiert ihn und arbeitet mit den Daten. Das geht dann problemlos sogar über Sprach- / Systemgrenzen hinaus. Ich habe hier einige Clientprogramme in Lazarus geschrieben, die mit einer Serverapplikation bestehend aus PHP in einem Apache-Server kommunizieren.
mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Wie Strings mit Synapse verschickt werden, ist klar. AsJson ist einfach und wie ich den String dann nach Json zurück konvertieren kann, würde ich vielleicht noch finden - vermutlich per AsString(). Aber was ist mit Unicode? Laut Quellcode ist TJSONStringType = AnsiString; definiert.
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Protokoll für komplexe Kommunikation
Scotty hat geschrieben:Aber was ist mit Unicode? Laut Quellcode ist TJSONStringType = AnsiString; definiert.
--> UTF8
-
- 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: Protokoll für komplexe Kommunikation
Momentan unterscheiden FPC nicht zwischen AnsiString und UTF8.Scotty hat geschrieben: Laut Quellcode ist TJSONStringType = AnsiString; definiert.
-Michael
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Jetzt frage ich doch besser erstmal hier: Wie bekomme ich aus dem verschickten String wieder ein TJSONObject?
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2641
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Protokoll für komplexe Kommunikation
Scotty hat geschrieben:Jetzt frage ich doch besser erstmal hier: Wie bekomme ich aus dem verschickten String wieder ein TJSONObject?
Mit dem TJSONParser funktioniert das. Dessen Methode Parse gibt ein TJSONData-Objekt zurück was wieder in ein TJSONObject gewandelt werden kann.
Ein Beispiel wie ich das gemacht habe kannst du dir unter http://tohuwabohu.svn.sourceforge.net/viewvc/tohuwabohu/trunk/client/core/model.pas?view=markup ansehen.
mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de