skip to navigation
skip to content

Not Logged In

codinghyde.synapse develop

Flexible protocol schema for message-passing distributed systems.

Introduction
==========
Flexible protocol schema for message-passing distributed systems.

As part of a fairly large distributed system, I needed a way to format messages
 I would be sending through an AMQP bus with the following requirements:
 * Client support for at least PHP, Python, Java, and Erlang.
 * Small and reasonably fast (meaning, no XML).
 * Message versioning (add/remove/rename fields) with seamless fallback (older
   client can ignore new fields).
 * Easily installable (from the cheeseshop, for instance).
 * Allows me to write a schema, and checks messages to be valid both when
   sending and receiving.
 * Messages are tagged with their type (so I can decode a message into an
   object/struct without knowing what type the message should be).
 * If possible, field names should be sent in the message so that even if I
   don't have the schema, messages can be processed (say, from an unsupported
   language).
 * Should handle binary data without exagerated overhead (think base64 encoding
   in JSON messages).
 * Well documented and actively developed.

I looked into projects such as Google's Protocol Buffers, Apache's Thrift and
 Avro, MessagePack-RPC, ZeroC's Ice, and probably some others but I could not
 find a system that had most/all my requirements, so I decided to write my own.

In a nutshell, codinghyde.synapse is/has:
 * An IDL to describe message formatting.
 * A compiler/code-generator to produce easy-to-work-with code.
 * A generic message encoder/decoder framework targetting JSON, BSON, MsgPack,
   and YAML (after all, why invent yet another serialization format...).
 * Designed so that messages are processable without language support (decode
   the raw JSON message and it's contents should require little/no post
   processing to be useful).


Contact
==========
You can reach me via e-Mail at:
    ehyde at codinghyde com


Documentation
==========
Documentation will be a bit scarse for the time being, but everything public
should have at least a docstring by the time I make the first stable release.


License
==========
Released under the MIT/X11 license. See LICENSE for the full text.


Install
==========
% python setup.py install


Develop
==========
See DEVELOP for details.
 
  • Downloads (All Versions):
  • 0 downloads in the last day
  • 0 downloads in the last week
  • 0 downloads in the last month