p2p

package module
v0.0.0-...-1c4f729 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 5, 2026 License: MIT Imports: 1 Imported by: 0

README

P2P基础网络(p2p-net)

这是一个P2P节点的自由市场,任何应用都可以进入这个市场。

如果一个应用实现了搜寻应答接口,它就可以回应传入的搜寻请求:如果自己就是搜寻的目标(名识匹配),即回应自己的连系信息,否则转播该请求。这样,就形成了一个被动式的通用搜寻机制,实现了任意P2P应用的节点发现功能。

应用有自己专属的子网,当它们找到了自己的同类节点,即可连入本应用的子网。

成功连入应用子网的节点并不需要离开这个市场(资源占用极少),它们是市场的一部分,协助市场传播其它节点的搜寻请求。

如果这个市场成长到足够庞大(百万级连接),那么暴力发现就是可行的。这可以让初始节点中心化的机制不再必需,从而实现真正的完全去中心化!

安装

使用

性能

Documentation

Overview

Package p2p 提供P2P网络的基础功能实现。

Index

Constants

View Source
const BaseName = "dec93aa06b30069759af0920b0d0ca31571d75c5"

BaseName 基网名识 注:匹配测试时也会兼容空字符串。 sha1("Hello, P2P..")

Variables

This section is empty.

Functions

This section is empty.

Types

type Answerer

type Answerer interface {
	// Answer 回答查找请求。
	// @param msg 查找依据。
	// @return 回应数据。
	Answer(msg []byte) ([]byte, error)
}

Answerer 对 Finder 的个体回应。

type Finder

type Finder interface {
	// Find 搜寻指定键值的消息。
	// @param ctx 上下文控制。
	// @param msg 查找依据。
	// @return 信息提取通道。
	Find(ctx context.Context, msg []byte) <-chan []byte
}

Finder 通用广播查找。 既用于基网的节点搜寻,也用于子网的特定需求实现。 查询依据(msg)的含义由应用自行定义。 注记: 回应消息会适当加密以保护隐私。但这对用户是透明的。

type NatType

type NatType int

NatType NAT类型枚举。

const (
	Public NatType = iota // 公网(Open Internet)
	FullC                 // 完全锥型(Full Cone)
	RC                    // 受限锥型(Restricted Cone)
	P_RC                  // 端口受限锥型(Port Restricted Cone)
	Sym                   // 对称型(Symmetric)
)

NAT类型常量。

type Network

type Network struct {
	// contains filtered or unexported fields
}

Network 网络基础实现 包括P2P网络的基本功能:节点管理、分享、连接更新等。 另外包含一个通用查找功能。

func New

func New(name string, answerer Answerer) *Network

New 创建P2P网络实例。 主要用于子网嵌入复用,子网名识即为子网应用的名识, 在节点连接时,对端必须提供同样的名识才行。 注:基网由另外的方法(Open)创建。 @param name 子网名识。 @param answerer 查找回应接口实现。 @return P2P网络实例。

func Open

func Open(owner Answerer) *Network

Open 打开基网。 通用查找实现为自我识别(名识判断)。 参考: - 基网纯节点仅完成自我识别即可,没有其它功能。 - 应用节点传递自己的识别实现,即连入基网成为基网兼节点。 @param owner 自我识别实现。 @return 基网对象。

func (*Network) Find

func (nt *Network) Find(ctx context.Context, msg []byte) <-chan []byte

Find 通用查找实现。 向连接的节点发送查找请求。 从返回的通道中逐个提取回应。

func (*Network) Peer

func (nt *Network) Peer() *Peer

Peer 随机获取一个联系节点。 从当前连接池或候选池中提取(无阻塞)。 网络的一个基本方法,主要用于外部取得节点创建连接,获取服务等。 注意:返回的节点可能不可用。

func (*Network) Peers

func (nt *Network) Peers(n int) []*Peer

Peers 获取多个联系节点。 从当前连接池或候选池中提取(无阻塞)。 @param n 需要的节点数量。 @return 节点对象切片。 注意:返回的节点集未必全部可用。

type Peer

type Peer struct {
	Version int      // 版本号(初始版为1)
	Name    string   // 名识
	Proto   string   // 协议(quic | http2)
	Addrs   []string // 地址列表(IP:Port 格式)
	SPKI    []byte   // SPKI 指纹(sha256(SPKI))
	NATT    NatType  // NAT 类型,可选(仅UDP需要)
	Extra   []byte   // 额外信息,可选
}

Peer 节点对象。

func (*Peer) Bytes

func (p *Peer) Bytes() []byte

Bytes 序列化节点信息为字节切片。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL