I'm looking for a framework that enables me to communicate network nodes in a P2P fashion (without a central server). The main requirements would be:
- Routing data/messages using the available peers (support not only directly connected communication, but also multi-hop interchanges)
- Suports dynamic peers (can appear and disappear at any time, crash tolerant)
- Supports restricted networks (NAT, firewalls, etc)
- Java based. This is not a strict requirement, but since I would like to be able to support a variety of platforms and devices, it is a highly desired characteristic.
- Supports high traffic communication between (pairs of) peers (e.g. file transfer)
- Offers FIFO and (close to) exactly once message delivery guarantees. Although not an definitive requirement, I will need this, so it would be better if the framework already provides it.
- (optionally, but would be great) peer automatic discovery (discover peers when they become available).
- (optionally, but will need it in the future) secure communication (authentication between peers, secure channel, etc).
I've been researching (a lot). The best match I could find is the JXTA spec but is not maintained anymore (JXSE*).
I've also investigated and done some testing with JGroups* but it is limited with respect to point 1 (multi-hop routing) and partially in point 3 (communicating different "network types").
I came across FreePastry* but couldn't find any current (widely used) implementation.
Currently I'm checking out ActiveMQ* and MQTT* but they are broker oriented and, despite I think I can push their limits enough to get close to what I need, it feels like hacking their use case (smells like trouble).
*Sorry I don't clarify with links, but I don't have enough reputation yet.