If you want a portable, easy to use, multi-language and LGPLed solution, I would recommend you ZeroMQ:
- Amazingly fast, almost linear scaleable and still simple.
- Suitable for simple and complex systems/architectures.
- Very powerful communication patterns available: REP-REP, PUSH-PULL, PUB-SUB, PAIR-PAIR.
- You can configure the transport protocol to make it more efficient if you are passing messages between threads (
inproc://), processes (ipc://) or machines ({tcp|pgm|epgm}://), with a smart option to shave off some part of the protocol overheads in case of connections are running between VMware virtual machines (vmci://).
For serialization I would suggest MessagePack or Protocol Buffers (which other have already mentioned as well), depending on your needs.