问题
I will be starting a project which requires communication between distributed nodes(the project is in C++). I need a lightweight message passing library to pass very simple messages(basically just strings of text) between nodes. The library must have the following characteristics:
No external setup required. I need to be able to get everything up-and-running in my code - I don't want to require the user to install any packages or edit any configuration files(other than a list of IP addresses and ports to connect to).
The underlying protocol which the library uses must be TCP(or if it is UDP, the library must guarantee the eventual receipt of the message).
The library must be able to send and receive arbitrarily large strings(think up to 3GB+).
The library needn't support any security mechanisms, fault tolerance, or encryption - I just need it to be fast, simple, and easy to use. I've considered MPI, but concluded it would require too much setup on the user's machine for my project.
What library would you recommend for such a project? I would roll my own, but due to time constraints, I don't think that will be feasible.
回答1:
Take a look at ØMQ, i.e. ZeroMQ.
回答2:
Apache Qpid implements server and client libraries for Advanced Message Queuing Protocol. It has many features, from which you can use the following:
- Client can connect anonymous on the broker, specifying broker's IP/port
- Transport protocol is TCP or SCTP
- It has support for large messages using either pull style or push style semantics
- It's fast
- Usage is simple and available in C++:
- start a broker (or a couple of them, federated)
- connect with a client and listen in a queue
- connect with a client and write in a queue
回答3:
I use nanomsg for my distributed system. nanomsg is stable, mature, well supported light-weight messaging protocol library written in C.
It fulfills all your requirements:
1) There is no external setup required
2) TCP underlying protocol is a primary one.
3) Message sizes supported by nanomsg are expressed as a 64-bit integer.
(The default message size is 1024kB. This can be easily changed by API call to
support any size. The maximum size is limited only by available addressable memory!)
The other good library to consider is nng. It is in betta stage now.
来源:https://stackoverflow.com/questions/2614895/what-library-can-i-use-to-do-simple-lightweight-message-passing