2008-12-09 7 views
6

Ich versuche, eine geeignete Protokoll-Middleware für meine nächste verteilte Anwendung zu finden. Ich habe in den letzten Tagen einige Spezifikationen gefunden und mich gefragt, ob ich eine wichtige verpasst habe. Es sollte ein binäres Protokoll sein, RPCs unterstützen und optional Open-Source-Implementierungen in verschiedenen Sprachen haben. Hier ist die Liste der Protokolle gefunden:allgemeine binäre Protokolle

  • CORBA
  • ICE
  • AMQP
  • Thrift

Und dies ist die Liste der entlassenen Protokolle:

  • XML-basierte Protokolle, weil sie textbasiert sind (XML-RCP, SOAP, handgerollt usw.)
  • Protocol Buffers (Closed Source)
  • COM (nur für Windows)
+0

Gibt es einen Grund, warum es binär sein muss? – Skizz

+0

XML kann in einem platzsparenderen Binärformat codiert werden, siehe http://en.wikipedia.org/wiki/Binary_XML für die Optionen. – xahtep

+0

Ein Teil der Kommunikation wird wahrscheinlich zwischen Prozessen auf einem einzelnen Host stattfinden. XML (sogar komprimiertes XML) würde viel CPU-Zeit verschwenden – soulmerge

Antwort

13

Das Protokoll Puffer Projekt definitiv ist keine geschlossene Quelle.

Für welche Sprache/Plattform interessieren Sie sich?

  • Für Java, C++ und Python gibt es die Google code.
  • Denn es C# sind mindestens drei Projekte (einschließlich mine oder Marc's)
  • Für andere Sprachen/Plattformen finden Sie in der relevant wiki page

Beachten Sie, dass obwohl es Stub RPC-Unterstützung in Protocol Buffers, Google hasn 't seine tatsächliche RPC-Ebene freigegeben, so müssen Sie Ihre eigenen bereitstellen. Vorausgesetzt, dass Sie im Grunde eine Anforderungsnachricht übergeben und eine Antwortnachricht zurückgeben, ist es nicht , dass schwer über vorhandene Protokolle (z. B. HTTP POST) zu schichten.

8

Ich glaube nicht, Protocol Buffers Closed-Source sind. Die Seite deutet anders an, und es gibt Quelldownloads.

2

Sie könnten ASN.1 betrachten.

Es wird zum Verschlüsseln und Übertragen von Binärdaten in vielen anderen Protokollen (z. B. SNMP, LDAP) verwendet, obwohl ASN.1 selbst kein Transportprotokoll definiert.

+0

Es kann sogar verwendet werden, um XML weiter zu kodieren: http://java.sun.com/developer/technicalArticles/xml/fastinfose/ – xahtep

3

Ziemlich wahrscheinlich nicht der beste Kandidat, aber der Vollständigkeit halber möchte ich hinzufügen, dass es eine gibt.

3

Ich würde vorschlagen, dass Sie Google Protocol Buffers überdenken. Es gibt viele Open-Source-Implementierungen für alle wichtigen Plattformen, einschließlich C++/Java/Python, die von Google selbst veröffentlicht wurden.

Wie von Jon Skeet oben erwähnt wurde, definiert PB-Spezifikation nicht RPC-Modell, aber es ist sehr einfach, Ihre eigenen RPC mit PB zu definieren.

Alternativ können Sie sich ASN.1 ansehen. Es gibt eine Menge Apps, die ASN.1 verwenden.

0

Ich würde empfehlen, RabbitMQ AMQP auszuprobieren und Protokollpuffer, XML oder ein anderes Datenformat wie JSON zu verwenden, um zu schmecken. Abgesehen davon, dass Sie relativ einfach und einfach zu Beginn sind, können Sie RPC- und asynchrone Pubsub-Stile mischen und abgleichen und haben eine gute Verteilung über Sprachen, Protokolle und Plattformen. Aber es ist vielleicht nicht gut für Ihr Problem - alles hängt davon ab, was Sie tun wollen! Prost, Alexis

2

Joe Armstrong UBF scheint nicht auf, aber es erfüllt Ihre Anforderungen mit einem geschmackvollen Design.