节点发现服务(Findings)
一个P2P网络,提供各种P2P应用的同类(或异类)节点的发现服务。
作为一个持续运行的公共P2P服务网络,它支持P2P所必须的基础服务:节点的NAT层级探测和UDP打洞协助。
这个公共服务由区块链应用的币金奖励提供经济驱动力。
这解决了P2P应用初始连接节点信息中心化的问题,可以成为一个P2P世界的基础设施。
功能
- 节点间自我组网,维持动态的连接,形成一个P2P网络。
- 接受应用节点的登记,包括任意节点(含NAT内网)的UDP连接信息,以及公网节点的TCP连接信息。
- 提供任意节点对自身NAT层级,以及NAT生命周期的探测服务。
- 提供应用节点的UDP打洞协助,以及对公网TCP服务节点的信息请求。
用法
运行一台本地Findings服务器,该服务器向Findings网络寻找节点创建连接。初始连接节点的信息可能内置于App配置中,如果失效则向Findings网络搜寻(暴力发现)。
应用客户端启动后,向该本地服务器请求其它Findings服务节点,然后申请NAT探测、获取应用TCP服务器、或UDP打洞协助。完成应用自身类型节点的连接和组网。
配置
{
user_id: "hello" , // 身份ID(非群组成员时任意)
log_root: "", // 日志根目录,默认采用系统缓存目录
server_uport: 7788, // 服务端口(UDP)
server_tport: 443 , // 服务端口(TCP,混入模式)
remote_uport: 7788, // 远端端口(UDP),用于暴力发现
remote_tport: 443 , // 远端端口(TCP),用于暴力发现
shortlist: 100, // 候选池大小(节点数)
punch_xpool: 500, // 应用池大小(每种应用可同时连接的节点数)
share_xpool: 1000, // TCP服务器分享池大小
peers_help: 10, // 上线协助发送条目数
peers_punch: 5, // 打洞协助的最大节点数(一个请求)
peers_range: 200, // 节点寻找的范围(基于起点的半径)
stun_on: true, // 是否开启NAT探测服务(类型&存活期)
nat_type: 7080, // 本地 NAT 类型探测监听端口
nat_living: 7081, // 本地 NAT 存活期探测监听端口
client_only: false, // 仅以客户端身份运行(私有部署,无服务)
}
注:
如果是 FullC 类型节点提供服务,服务端口由 NAT 映射决定。
测试
(待补充)