P2P技术已经不是一个新的技术了,我们早就已经感受到了迅雷、快播等P2P软件带来的极致下载体验,近些年新起并大热的区块链技术,又让P2P技术换发第二春。相对于集中式的软件架构,P2P网络在数据共享、带宽利用,以及隐私保护等方面体现了较大的优势,并且某些视频播放软件,在集中式软件架构基础上混合P2P能力加持,实现了节省带宽、优化播放体验的效果。
TomP2P介绍
TomP2P是一个使用Java实现的开源的P2P框架,采用的是Apache 2.0 License开源协议,这个对于Java开发者来说可以说是相当友好了。利用TomP2P可以快速实现一个P2P网络,一方面他帮开发者屏蔽了P2P中的很多技术细节,另一方面他又提供了可读性可扩展性极强的API,方便开发者们对其进行扩展,通过扩展可以轻松实现丰富的自定义功能。
注:TomP2P官网(可能需要科学上网):https://tomp2p.net/
TomP2P项目早在2004年便已启动,受限于当时Java版本,最早的版本,TomP2P底层通讯使用的BIO(阻塞式IO),现在来看已经是比较落后的方式。之后的版本使用了Apache MINA,届时,在异步通讯方面得到了极大的改进,但还并不是很完善。直到最后采用了Java最流行的网络通讯框架Netty,且一并统一了内部的编程规范(利用Future机制,大量采用了异步编程的方式),并保持至今;从本系列文章中摘录的大量的TomP2P源码中也不难看出这个特点,如果你对Netty相当了解的话,那阅读本系列中的代码,甚至是TomP2P的源码将不是一件难事。
注:在这里推荐一个不错的学习java并发编程和网络编程的网站:并发编程网
TomP2P目前大量使用在学术方面的项目和研究中,并且很多学术论文都基于此,但欠缺的是稍有真正商用落地的项目,并且相关的性能报告也难以找到 ,故此TomP2P的可靠性还有待检验。以下是使用TomP2P的一些项目:
- Hive2Hive
- LiveShift
- DRFS
- P2PFastSS
- PeerVote
- PSH/CompactPSH
- P2P-PTT, a P2PSIP based PTT service
特性列表
- 已使用Java6版本特性,并使用Netty NIO实现DHT(分布式哈希表)
- 基于XOR迭代路由方式实现类似Kademlia的DHT算法
- 已实现标准的DHT get() put() 方法
- DHT框架支持扩展,并已扩展实现了putIfAbsent(), add(), send(), digest()等方法
- 布隆过滤器
- 支持节点之间数据备份,包括间接、直接两种方式
- 混合的分布式tracker
- 基于Key-pair签名和验签机制,实现数据防篡改保护
- 通过UPNP和NAT-PMP机制实现端口映射(需要设备支持)
- 支持IPV6
- 异步编程框架
下载TomP2P
方式一:Maven依赖
由于TomP2P的jar包没有上传中心仓库,所以在pom.xml文件中添加特定的仓库配置
tomp2p.net
http://tomp2p.net/dev/mvn/
然后再添加TomP2P的maven依赖
net.tomp2p
tomp2p-{module}
5.0-Beta8
注:5.0-Beta8版本是最新的稳定版本,发布于2015年,目前源码已经很少有更新了,但框架功能已基本完善,开发者可根据自己需要下载源码进行修改和扩展
方式二:下载完整发布包
tomp2p-all-5.0-Beta8-dist.zip
方式三:下载源码自行打包
源码地址:https://github.com/tomp2p/TomP2P
注:当前最新源码可能有编译错误,建议切到5.0-Beta8版本对应的tag进行修改和打包,github上也有对应版本的完整发布包下载入口