Question

I'm trying to find a suitable protocol middleware for my next distributed application. I've found several specifications in the last few days and was wondering if I missed an important one? It should be a binary protocol, support RPCs and optionally have open-source implementations in different languages. Here's the list of protocols I found:

  • CORBA
  • ICE
  • AMQP
  • Thrift

And this is the list of dismissed protocols:

  • XML based protocols because they are text based (XML-RCP, SOAP, hand-rolled, etc.)
  • Protocol Buffers (Closed Source)
  • COM (Windows-only)
Was it helpful?

Solution

The Protocol Buffers project definitely isn't closed source.

Which language/platform are you interested in?

Note that although there's stub RPC support in Protocol Buffers, Google hasn't released its actual RPC layer, so you'd have to provide your own. Given that basically you'd pass a request message and return a response message, it's not that hard to layer it over existing protocols (e.g. HTTP POST).

OTHER TIPS

I don't think Protocol Buffers are closed-source. The page implies differently, and there are source downloads.

Quite possibly not the best candidate, but for completeness' sake I'd like to add that there's a binary encoding for XML.

I would suggest that you reconsider Google Protocol Buffers. There are many open source implementations for all major platforms, including C++/Java/Python one published by Google itself.

As it was mention by Jon Skeet up above, PB spec does not define RPC model but it's extremely easy to define your own RPC using PB.

Alternatively, you could take a look at ASN.1. There is a ton of apps that use ASN.1.

You could look at ASN.1.

It's used for encoding and transmitting binary data in many other protocols (e.g. SNMP, LDAP) although ASN.1 does not itself define a transport protocol.

Joe Armstrong's UBF doesn't seem to have caught on, but it satisfies your requirements with a tasteful design.

I would recommend trying out RabbitMQ AMQP, and using Protocol Buffers, XML, or some other data format such as JSON, to taste. In addition to being relatively simple and easy to get started with, this lets you mix and match RPC and asynchronous pubsub styles, and has a good spread across languages, protocols and platforms. But it may not be a good fit for your problem -- it all depends what you are trying to do! Cheers, alexis

There is a patch from ZeroC to Ice to support Google Protocol Buffers natively.

http://www.zeroc.com/labs/protobuf/

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top