2010-12-27 11 views
1

Ich frage mich, ob ich XML als Protokoll auf Anwendungsebene verwenden könnte. Das XML wird nur auf dem TCP-Protokoll sitzen und die 2 Anwendungen müssen nur wissen, wie XML zu analysieren ist.Frage zur Verwendung von XML als Protokoll auf Anwendungsebene

Aber das Problem ist, XML ist nicht kompakt genug. Sollte ich einen Algorithmus zum Komprimieren der XML-Payload verwenden, bevor ich sie mit TCP sende? Wenn ich es komprimiere, dann sind die Kosten für das Komprimieren/Dekomprimieren an beiden Enden beteiligt. Was für ein Dilemma. Irgendwelche guten Vorschläge? Oder ich nehme den falschen Weg?

Vielen Dank.

Antwort

1

Definieren Sie "kompakt genug", haben Sie gemessen, dass es für Ihre Anwendung zu langsam ist? Vermeiden Sie premature optimisation.

Wie bei jedem Protokoll gibt es Kompromisse in verschiedenen Richtungen. XML bietet Ihnen ein bekanntes plattformübergreifendes Format mit Bibliotheken für nahezu jede Sprache, das alle Arten von strukturierten Daten darstellen kann. XMPP entscheidet sich dafür und verwendet optionale Komprimierung für bandbreitenbeschränkte Setups. Experimente in der XMPP-Welt mit alternativen Darstellungen haben sich selten als lohnend erwiesen.

Eine Kerbe von XML, aber immer noch viele der Vorteile bietet JSON. Es fehlt zwar der Namespace, aber es ist ziemlich einfach, und Bibliotheken sind fast so häufig wie XML-Bibliotheken. Dennoch ist JSON textbasiert und kann in einigen Situationen immer noch ausführlich sein.

Die letzte vernünftige Wahl wäre ein binäres Protokoll. Dies hat den Vorteil, dass Sie es speziell auf Ihre Anwendung zuschneiden und optimieren können. Die Nachteile sind, dass Sie das Parsing und die Serialisierung selbst schreiben müssen, obwohl es Tools gibt, um das zu automatisieren, wie das Protocol Buffers Projekt von Google.

Letztlich sind alle diese an verschiedenen Orten geeignet, und die Wahl liegt beim Anwendungsentwickler, für den sie für ein bestimmtes Projekt verwenden sollten.

1

Ich würde sagen, dass Sie direkt XML für Ihre Nachrichten verwenden können und sich nicht mit der Komprimierung oder irgendetwas beschäftigen (XML ist nicht gerade blitzschnell), wenn Sie eine einfache Art und Weise benötigen, wie Ihre Nachrichten aussehen. Wenn Sie etwas schneller und kompakter benötigen, werfen Sie einen Blick auf Google Protocol Buffers oder Thrift (ich persönlich bevorzuge Protokollpuffer, aber jeder ist nicht wie ich ..).

Die Verwendung von XML kann zum Beispiel ein guter Weg sein, wenn Sie Ihre Schnittstelle einfach mit vielen verschiedenen Clients (zB Web Services) arbeiten lassen müssen. Wenn Sie auf der anderen Seite immer für beide Enden der Kommunikation zuständig sind, können Sie immer etwas schnell machen und später optimieren.