2.1. RPCP
RPCP ist ein binäres Protokoll, was auf minimalen Datentransfer und absolute Dateneffizienz ausgelegt ist. Es werden neben dem sehr kurzen Header nur Nutzdaten übertragen. Objekteigenschaften werden in der Reihenfolge übermittelt, wie sie in der Dokumentation aufgeführt sind. Bei Strings und Arrays wird allerdings zusätzlich zu den reinen Nutzdaten die Länge des zu erwartenden Strings bzw. Arrays übermittelt. Dieses Protokoll könnte zwar auch für Drittanwendungen genutzt werden, ist aber etwas schwieriger zu verstehen als XML-RPC oder JSON-RPC. RPCP bedeutet Remote Procedure Call Protocol und ist kein Standardprotokoll. Es ist mithilfe dieser Dokumentation dennoch möglich, auch dieses Protokoll für eine Datenübertragung zu nutzen. Vor allem die effizientere Datenübertragung im Gegensatz zur XML-RPC oder JSON-RPC machen es attraktiv.
In diesem Protokoll werden die Daten möglichst effizient binär kodiert. Das heißt, es erfolgt keine Übermittlung von Informationen über Datentypen oder Feldnamen. Eine abstrakte Klasse, welche die Daten serialisiert, muss von ihren Eigenschaften absolut kompatibel mit der Klasse sein, welche die Daten deserialisiert.
Für die Übertragung werden die Daten escaped. Dabei wird jedes Zeichen mit dem Wert #10 durch \n ersetzt und jedes \ durch \\ ersetzt. Das Trennzeichen für den Header und die Nutzdaten ist das Zeichen #10. Ansonsten wird der binäre Datenstrom nicht verändert.
Der Header jeder Übertragung in diesem Protokoll ist folgendermaßen Aufgebaut:
Feld |
Werte |
Bytes |
Beschreibung |
---|---|---|---|
Protokoll | RPCP | 4 | Der Name des Übertragungsprotokolls. |
Version | 1.0 | 3 | Die Version des Protokolls. |
Kommando | TFbmRpcpCommands | 1 | Das Kommando, welches ausgeführt werden soll (als Byte). |
Kompression | 0, 1 | 1 | Legt fest, ob die Übertragung komprimiert wurde. |
Keep-Alive | 0, 1 | 1 | Legt fest, ob die Verbindung nach der Übertragung aufrechterhalten werden soll. |
Länge der Nutzdaten | 0-2147483647 | 4 | Legt die Länge der Nutzdaten fest. |
Fehlercode | 0-2147483647 | 4 | Der Fehlercode, falls ein Problem aufgetreten ist. |
Länge des Fehlers | 0-256 | 1 | Gibt die Länge der Fehlerbeschreibung an. |
Fehlerbeschreibung | Zeichenkette | 0-256 | Hier steht die Fehlerbeschreibung zur Verfügung, wenn eine Länge angegeben wurde. |
Länge der Methode | 0-256 | 1 | Gibt die Länge der Methode an. |
Methode | Zeichenkette | 0-256 | Hier steht der Methodenname zur Verfügung, wenn eine Länge angegeben wurde. |
Länge des Dateinamens | 0-256 | 1 | Gibt die Länge des Dateinamens an. |
Dateiname | Zeichenkette | 0-256 | Hier steht der Dateiname zur Verfügung, wenn eine Länge angegeben wurde. |
Länge des Benutzers | 0-256 | 1 | Gibt die Länge des Benutzers an. |
Benutzername | Zeichenkette | 0-256 | Hier steht der Benutzername zur Verfügung, wenn eine Länge angegeben wurde. |
Länge des Passworts | 0-256 | 1 | Gibt die Länge des Passworts an. |
Passwort | Zeichenkette | 0-256 | Hier steht das Passwort zur Verfügung, wenn eine Länge angegeben wurde. |
Länge des User-Agents | 0-256 | 1 | Gibt die Länge des User-Agents an. |
Methode | Zeichenkette | 0-256 | Hier steht der User-Agent zur Verfügung, wenn eine Länge angegeben wurde. |
Client Timeout | 0-2147483647 | 4 | Gibt das Verbindungstimeout des Clients an. |
Der Header ist also mindestens 28 Bytes und maximal 1564 Bytes lang.
Die Nutzdaten der Datenübertragung werden genauso kodiert, wie der Header selbst. Bei der Übertragung werden die Daten grundsätzlich so kodiert:
Datentyp |
Bytes |
---|---|
Boolean | 4 |
Integer | 4 |
Enum | 4 |
Set | 4 |
Int64 | 8 |
Double | 8 |
Zeichenkette | 4 (Längenangabe) + 1 Byte je Zeichen |
Array | 4 (Anzahl Elemente) |
Klasse/Struktur | 4 (Enthält die Größe der Klasse) |
Wenn eine Methode mit zwei Parametern (Integer und Zeichenkette) aufgerufen werden soll, dann könnten die Nutzdaten folgendermaßen aussehen:
Quelltext-Beispiel:
1
#0#0#0#65#0#0#0#5'Hallo'
Die Nutzdaten enthalten die Zahl 65 und die Zeichenkette 'Hallo' mit einer Länge von 5 Bytes. Die oben gezeigte Darstellung wird z.B. in Delphi verwendet.
Themen dieser Ebene |
---|
2.1. RPCP |
2.2. HTTP-Protokolle |