TomP2P

TomP2P is a DHT with additional features, such as storing multiple values for a key. Each peer has a table (either disk-based or memory-based) to store its values. A single value can be queried / updated with a secondary key. The underlying communication framework uses Java NIO to handle many concurrent connections.

Development

TomP2P uses github for development and issue tracking. In case case of questions, please use github as well. You can also write to tom-at-tomp2p.net to contact me directly.

Latest News

Last month a server crash forces us to reinstall the server. While most of the important data were recovered, the mail archive is not yot recovered. However, the mail archive will be made available read-only in future, and we plan to switch to github for issues or questions.

The NAT integration is almost done and will be pushed soon.

The NAT integration, hole punching, and stable relaying is on the way. The integration of those features started as well as integration of lombok in many builder classes. Since the hole punching breaks the RPC pattern, it will take some time to properly implement it.

TomP2P 5 Beta 8 just released. Check out the latest beta version.

P2P Challenge Task 2015 release

Testing may not succeed all the time due to timing issues. Hole punching is currently being merged, its not working at the moment. Both issues will be resolved.

<dependency>
  <groupId>net.tomp2p</groupId>
  <artifactId>tomp2p-{module}</artifactId>
  <version>5.0-Beta8</version>
</dependency>

TomP2P 5 Beta 7 just released. Check out the latest beta version.

Minor changes: Implemented efficient broadcast, replacing random walk with structured walk; added skeleton for tomp2p-social; fix buffer leak when using RSync; added flag to indicate manual port forwarding (e.g. when using PlanetLab/EmanicsLab)

Testing may not succeed all the time due to timing issues. Hole punching is currently being merged, its not working at the moment. Both issues will be resolved.

<dependency>
  <groupId>net.tomp2p</groupId>
  <artifactId>tomp2p-{module}</artifactId>
  <version>5.0-Beta7</version>
</dependency>

TomP2P 5 Beta 6 just released. Check out the latest beta version.

Minor changes: fixed issues in NAT and improved memory handling

Testing may not succeed all the time due to timing issues. This will be resolved.

<dependency>
  <groupId>net.tomp2p</groupId>
  <artifactId>tomp2p-{module}</artifactId>
  <version>5.0-Beta6</version>
</dependency>

Feature List of TomP2P

Applications using TomP2P

TomP2P is used in academia in several projects at the Communication Systems Group and several papers were published that used TomP2P. The target version of TomP2P is Java 6 and TomP2P also has been sucessfully tested and used on Android. TomP2P is distributed under the Apache License, Version 2.0 (with the exception of net.tomp2p.natpmp, which is LGPL).

Testimonial

" ... With your implementation I was able to overcome two exams with honors last week, making an application based on DHT. [...] Thank you again, Alessandro ... "

Academic Background

TomP2P has been successfully used in academic projects: EC-GIN (Europe-China Grid InterNetworking), EMANICS (European Network of Excellence for the Management of Internet Technologies and Complex Services), and "SmoothIT (Simple Economic Management Approaches of Overlay Traffic in Heterogeneous Internet Topologies):http://www.smoothit.org/. Within these projects features and bug fixes have been added to make TomP2P a stable and flexible P2P library. TomP2P was also supported in parts by the EU Network of Excellence (NoE) FLAMINGO under grant no. ICT-2012-318488 from November 1, 2012 to December 31, 2016.

Similar Projects

The following list provides an overview over similar Java DHT implementations that have recently showed activity (github, releases). If you think that a project is missing here, please concact me!

History of TomP2P

The first TomP2P version was created in 2004 by Thomas Bocek and used for his master’s thesis for a distributed DNS. This version used blocking IO operations and did not scale well. Thus, TomP2P version 2 has been created and used Apache MINA. This second version with the asynchronous communication framework scaled better, but TomP2P was not well designed for non-blocking operations and a third version has been designed from scratch. The third version of TomP2P uses Netty, which is a high performance Java NIO framework. The design of the third version was tailored to non-blocking operations and have been used successfully in many academic projects.