Reputation: 1724
I am looking for an inter-process communication facility that can be used between languages and/or environments running on the same or different systems. For instance it should allow signals to be sent between Java, C# and/or C++ components, and it should also support some kind of queueing mechanism. The only facility that is obviously environment and language-independent is files, but I assume this would be much too slow - and disciplined queueing may be difficult to implement. Many of the other facilities described in the literature only apply to one language or one operating system. Suggestions would be appreciated!
Upvotes: 4
Views: 3999
Reputation: 10843
When talking about heterogeneous architecture, IMHO transport layer (as you marked "sockets" as answer) is as important, as protocol layer (data serialization etc).
What I've found that returns in time, is learning programming library that unifies serialization of data between different programming languages, operating systems, and architectures (big-endian/low-endian, 16/32/64 bits, etc).
My favourite choice is Google Protocol Buffers, with in-box support for C++, Python, java and Third-Party Add-ons with support for huge amount of programming/scripting languages (including Lua, Matlab, Ruby, Perl, R, Php, OCaml, Mercury, Erlang, Go, D, Lisp) and RPC implementations (like Zeroc ICE ). Out of list many other products support them like SWI-Prolog Google Protocol Buffers Library.
The alternative is Thrift with support for a variety of programming languages, as well.
For comparison, you might like to check: Thrift vs Protobuf vs JSON.
Upvotes: 4
Reputation: 13340
My bet is on DBus [ peer to peer ] - Which has better flow control . It runs on top of RPC hence there are many language bindings. RPC ofcourse is built on top of local sockets.
Upvotes: 0
Reputation: 4159
Check out Microsoft Message Queue or something simillar. Also have a look at XML-RPC, SOAP, JSON etc.
Upvotes: 1
Reputation: 7615
I would use XML-RPC personally. It is easy to use on multiple platforms, and cleanly meets all your requirements, any queuing can be handled programmaticaly.
Upvotes: 1
Reputation: 7108
You need to probably look at something like ActiveMQ. In EAI patterns, the JMS bus is heavily used for the purpose of integrating several modules written in several diffetent languages and running on several systems. To me, Such Enterprise Message Bus like ActiveMQ fits your need. Let me know if you are looking for something else.
-Shamik
Upvotes: 4