一起来读源码236-Ipfs 第三方库:go-libp2p-core

摘要

ipfs的p2p go语言实现

详情

alias.go
connmgr/decay.go
connmgr/gater.go
connmgr/manager.go
connmgr/null.go
connmgr/presets.go
control/disconnect.go
crypto/ecdsa.go
crypto/ed25519.go
crypto/key.go
crypto/key_not_openssl.go
crypto/key_openssl.go
crypto/openssl_common.go
crypto/rsa_common.go
crypto/rsa_go.go
crypto/rsa_openssl.go
crypto/secp256k1.go
crypto/pb/crypto.proto
discovery/discovery.go
discovery/options.go
event/addrs.go
event/bus.go
event/dht.go
event/doc.go
event/identify.go
event/network.go
event/protocol.go
event/reachability.go
introspection/pb/introspection.proto
introspection/doc.go
introspection/endpoint.go
introspection/introspector.go
metrics/bandwidth.go
metrics/registers.go
metrics/reporter.go
mux/mux.go
network/conn.go
network/context.go
network/errors.go
network/network.go
network/notifee.go
network/stream.go
peer/pb/peer_record.proto
peer/addrinfo.go
peer/addrinfo_serde.go
peer/peer.go
peer/peer_serde.go
peer/record.go
peer/set.go
peerstore/peerstore.go
pnet/codec.go
pnet/env.go
pnet/error.go
pnet/protector.go
protocol/id.go
protocol/switch.go
record/pb/envelope.proto
record/envelope.go
record/record.go
routing/options.go
routing/query.go
routing/query_serde.go
routing/routing.go
sec/insecure/pb/plaintext.proto
sec/insecure/insecure.go
sec/security.go
transport/transport.go

知识点

  • mh(multihash)结构:hash算法编号+摘要长度+摘要内容

定义类型

名称类型注释
DisconnectReasonint断线理由
Optionfunc(opts *Options) error设置选项函数
AddrActionint地址动作
SubscriptionOptfunc(interface{}) error订阅选项函数
EmitterOptfunc(interface{}) error触发器选项函数
CancelFuncfunc()取消函数
wildcardSubscriptioninterface{}订阅通配符
RawJSONstring滚动的json
Directionint表示哪类节点需要连接
Connectednessint连接状态
StreamHandlerfunc(Stream)流处理器
ConnHandlerfunc(Conn)连接处理器
IDstringid,节点id
PSK[]byte利用私钥启用私有网络
HandlerFuncfunc(protocol string, rwc io.ReadWriteCloser) error协议或流回调函数
Optionfunc(opts *Options) error选项路由函数
QueryEventTypeint查询事件类型
Multiaddrmultiaddr.Multiaddr多地址
PeerIDpeer.ID节点id
ProtocolIDprotocol.ID协议id
PeerAddrInfopeer.AddrInfo节点地址信息
Hosthost.Host主机
Networknetwork.Network网络
Connnetwork.Conn连接
Streamnetwork.Stream

定义错误

名称注释
ErrExpectedEOFerrors.New(“read data when expecting EOF”)读空错误
ErrReseterrors.New(“stream reset”)流重置
ErrNoRemoteAddrserrors.New(“no remote addresses”)不存在远程地址错误
ErrNoConnerrorrs.New(“no usable connection to peer”)没有可用的连接错误
ErrEmptyPeerIDerrors.New(“empty peer ID”)空节点id错误
ErrNoPublicKeyerrors.New(“public key is not embedded in peer ID”)节点的公钥无效
ErrNotFound-errors.New(“item not found”)
ErrNotInPrivateNetworkerrorNewError(“private network was not configured but is enforced by the environment”)
ErrEmptyDomainerrors.New(“envelope domain must not be empty”)空域
ErrEmptyPayloadTypeerrors.New(“payloadType must not be empty”)负载类型不为空
ErrInvalidSignatureerrors.New(“invalid signature or incorrect domain”)不可用签名
ErrPayloadTypeNotRegisterederrors.New(“payload type is not registered”)负载类型没有注册
ErrNotFounderrors.New(“routing: not found”)路由未发现
ErrNotSupportederrors.New(“routing: operation or key not supported”)不支持此路由操作

定义全局变量

地址动作
名称类型注释
UnknownAddrAction0
AddedAddrAction1
MaintainedAddrAction2
RemovedAddrAction3
待连接节点类型
名称类型注释
DirUnknownDirection0, 未知节点
DirInboundDirection1,远程节点连接
DirOutboundDirection2,本地节点连接

连接状态

名称类型注释
NotConnectedConnectedness0,连接未连接
ConnectedConnectedness1,连接已打开,且活动着
CanConnectConnectedness2,可以连接,意味着最近连接过,已经被安全地关闭
CannotConnectConnectedness3,无法连接,意味着最近尝试连接过,但是失败了
可连接性
名称类型注释
ReachabilityUnknownReachability0,无法确定是否可连接
ReachabilityPublicReachability1,可被公开连接
ReachabilityPrivateReachability2,可以被私有连接
节点时长设置
名称类型注释
AddressTTLtime.Duration1小时, 地址有效期
TempAddrTTLtime.Duration2分钟, 临时地址有效期
ProviderAddrTTLtime.Duration10分钟, 提供者地址有效期
RecentlyConnectedAddrTTLtime.Duration10分钟, 最近连接地址有效期
OwnObservedAddrTTLtime.Duration10分钟, 节点监视地址有效期
PermanentAddrTTLtime.Durationmath.MaxInt64, 长期地址时长
ConnectedAddrTTLtime.Durationmath.MaxInt64-1, 连接地址时长

psk路径

名称类型注释
pathPSKv1[]byte“/key/swarm/psk/1.0.0/”
pathBinstring“/bin/”
pathBase16string“/base16/”
pathBase64string“/base64/”

查询事件类型

名称类型注释
SendingQueryQueryEventType0, 发送查询到节点
PeerResponseQueryEventType1, 节点响应
FinalPeerQueryEventType2, 发现一个"closest"节点
QueryErrorQueryEventType3, 查询出错
ProviderQueryEventType4, 发现一个提供者
ValueQueryEventType5, 发现一个值
AddingPeerQueryEventType6, 添加一个节点到查询
DialingPeerQueryEventType7, 向节点拨号
其他
名称类型注释
DecayFnfunc(value DecayingValue, delta int) (after int)以减法value的腐败值
BumpFnfunc(value DecayingValue, delta int) (after int)以加法计算value的腐败值
ConnManagerNullConnMgr连接管理器
EOFTimeouttime.Second60秒,流处理超时时长
NoopHandlerfunc(s MuxedStream){s.Reset()}重置流
DialPeerTimeouttime.Duration60秒, 拨号超时
MessageSizeMax1 << 224MB, 最大消息尺寸
AdvancedEnableInliningbooltrue, 让键少于42字节,除非必要千万不要改,默认为true(极重要)
maxInlineKeyLengthint42, 最大键长度
PeerRecordEnvelopeDomainstring“libp2p-peer-record”
PeerRecordEnvelopePayloadType[]byte[]byte{0x03, 0x01}, 节点记录负载类型
EnvKeystring“LIBP2P_FORCE_PNET”, 环境变量
ForcePrivateNetworkboolfalse, 如果设置了"LIBP2P_FORCE_PNET"环境变量,就启用私有网络
TestingIDID“/p2p/_testing”, 测试id
QueryEventBufferSizeint16, 查询事件缓存尺寸
IDstring“/plaintext/2.0.0”
DialTimeout60秒, 拨号超时
AcceptTimeout60秒, 接收超时

定义全局函数

函数注释
DecayFn func(value DecayingValue) (after int, rm bool)过期函数
BumpFn func(value DecayingValue, delta int) (after int)碰撞函数
SupportsDecay(mgr ConnManager) (Decayer, bool)连接管理器转decayer
DecayNone() DecayFn返回过期值的真实值
DecayFixed(minuend int) DecayFn是否匹配minued
DecayLinear(coef float64) DecayFn是否匹配coef
DecayExpireWhenInactive(after time.Duration) DecayFn判断是否超过指定过期时间
BumpSumUnbounded() BumpFn计算参数value的值与参数delta数量值之和(不指定范围)
BumpSumBounded(min, max int) BumpFn计算参数value的值与delta数量值之和(指定范围)
BumpOverwrite() BumpFn无意义
MultistreamSemverMatche(base protocol.ID) (func(string) bool, error)根据协议id返回一个版本比较函数
FlullClose(s network.Stream) error读完再关闭流
AwaitEOF(s network.Stream) error等待读完
InfoFromHost(h Host) *peer.AddrInfo返回主机的id和地址信息
NewBandwidthCounter() *BandwidthCounternew一个带宽统计器
RegisterViews(namespace string, views …*view.View) error?
LookupViews(name string) ([]*view.View, error)?
AllViews() []*view.View?
WithNoDial(ctx context.Context, reason string) context.Context?
GetNoDial(ctx context.Context) (nodial bool, reason string)开启新stream
GetDialPeerTimeout(ctx context.Context) time.Duration获得节点拨号时长
WithDialPeerTimeout(ctx context.Context, timeout time.Duration) context.Context返回一个携带超时信息的上下文
AddrInfoFromP2pAddrs(maddrs …go-multiaddr.Multiaddr) ([]AddrInfo, error)从p2p地址获得地址信息
SplitAddr(m ma.Multiaddr) (transport ma.Multiaddr, id ID)拆分节点
AddrInfoFromP2pAddr(m ma.Multiaddr) (*AddrInfo, error)从p2p节点地址返回一个节点信息
AddrInfoToP2pAddrs(pi *AddrInfo) ([]ma.Multiaddr, error)从节点信息转回p2p节点地址
IDFromString(s string) (ID, error)将string转化为id
IDFromBytes(b []byte) (ID, error)将二进制数组转化为id
IDB58Decode(s string) (ID, error)将58位的string转化为id
IDB58Encode(id ID) string将id转为58位的string
IDHexDecode(s string) (ID, error)16进制数据转id
IDHexEncode(id ID) stringid转16进制string
Decode(s string) (ID, error)从str转id,id可能为multi_hash或sha256
Encode(id ID) stringid编码为58位string
FromCid(c cid.Cid) (ID, error)将CID转id
ToCid(id ID) cid.Cid将id转化为版本为v1的cid
IDFromPublicKey(pk ic.Pubkey) (ID, error)公钥转id
IDFromPrivateKey(sk ic.PrivKey) (ID, error)私钥转id,先提取公钥再转换
NewPeerRecord() *PeerRecord新建节点记录
PeerRecordFromAddrInfo(info AddrInfo) *PeerRecord从地址信息创建一个节点记录
PeerRecordFromProtobuf(msg *pb.PeerRecord) (*PeerRecord, error)从protobuf转为节点记录
DecodeV1PSK(in io.Reader) (PSK, error)解密PSK
ConvertFromStrings(ids []string) (res []ID)从string集合转换为id集合
ConverToStrings(ids []ID) (res []string)将id集合转换为string集合
Seal(rec Record, privateKey crypto.PrivKey) (*Envelope, error)?
ConsumeEnvelope(data []byte, domain string) (envelope *Envelope, rec Record, err error)?
UnmarshalEnvelope(data []byte) (*Envelope, error)
Expiredfunc(opts *Options) error
Offlinefunc(opts *Options) error
RegisterForQueryEvents(ctx context.Context) (context.Context, <-chan *QueryEvent>)注册并返回一个事件管道
PublishQueryEvent(ctx context.Context, ev *QueryEvent)发布一个查询事件到事件管道
SubscribesToQueryEvents(ctx context.Context) bool订阅查询事件
KeyForPublicKey(id peer.ID) string{return “/pk/” + string(id)}将节点id转为string并返回
GetPublicKey(r ValueStore, ctx context.Context, p peer.ID) (ci.PubKey, error)从节点id提取公钥,如果失败,就用r来提取私钥,并转为公钥

定义事件

事件参数1参数2参数3参数4
EvtLocalAddressesUpdated 地址更新事件Diffs bool 是否与上一个地址不同Current []UpdatedAddress 当前更新地址集合Removed []UpdatedAddress 删除的更新地址集合SignedPeerRecord *record.Envelope 已经签名的节点记录
GenericDHTEvent DHT事件Type string 类型Raw RawJSON json类型
EvtPeerIdentificationCompleted 节点验证完成事件Peer peer.ID 节点id
EvtPeerIdentifiecationFailed 节点验证失败事件Peer peer.ID 节点idReason error 原因
EvtPeerConnectednessChanged 节点连接变更事件Peer peer.ID 节点idConnectedness network.Connectedness
EvtPeerProtocolsUpdated 节点协议变更事件Peer peer.ID 节点idAdded []protocol.ID 新增的协议id集合Removed []protocol.ID 删除的协议id集合
EvtLocalProtocolsUpdated 本地协议变更事件Added []protocol.ID 新增的协议id集合Removed []protocol.ID 删除的协议id集合
EvtLocalReachabilityChanged 本地节点可访问性变更事件Reachability network.Reachability 可访问性

定义接口

Decayer 标记注册器

接口注释
io.Closer关闭器
RegistersDecayingTag(name string, interval time.Duration, decayFn DecayFn, bumpFn BumpFn) (DecayingTag, error)注册标记

DecayingTag 腐败标记

接口注释
Name() string返回标记名字
Interval() time.Duration时长
Bump(peer peer.ID, delta int) error设置delta到标记值
Remove(peer peer.ID) error移除节点的标记
Close() error关闭标记

ConnectionGater 网关

接口注释
InterceptPeerDial(p peer.ID) (allow bool)中断向节点拨号
InterceptAddrDial(peer.ID, ma.Multiaddr) (allow bool)中断向地址的拨号
InterceptAccept(network.ConnMultiaddrs) (allow bool)中断建立连接
InterceptSecured(network.Directionn, peer.ID, network.ConnMultiaddrs) (allow bool)中断握手验证
InterceptUpgraded(network.Conn) (allow bool, reason control.DisconnectReason)中断升级协议

ConnManager 连接管理器

接口注释
TagPeer(peer.ID, string, int)给节点打标记,用来标识节点
UntagPeer(p peer.ID, tag string)取消节点的标记
UpsertTag(p peer.ID, tag string, upsert func(int)int)更新节点标记
GetTagInfo(p peer.ID) *TagInfo获得tag信息
TrimOpenConns(ctx context.Context)终止已打开的连接
Notice() network.Notifiee返回一个通知函数
Protect(id peer.ID, tag string)给节点打标记,并赋予保护
Unprotect(id peer.ID, tag string) (protected bool)打标记并取消保护
IsProtected(id peer.ID, tag string) (protected bool)判断节点是否被保护
Close() error关闭连接管理器

Advertiser 推荐器

接口注释
Advertise(ctx context.Context, ns string, opts …Option) (time.Duration, error)推荐

Discoverer 发现器

接口注释
FindPeers(ctx context.Context, ns string, opts …Option) (<-chan peer.AddrInfo, error)查找节点

Discovery 发现接口,包括推荐器和发现器

接口注释
Advertiser推荐器
Discoverer发现器

Emitter 触发器

接口注释
io.Closer关闭接口
Emit(evt interfae{}) error触发事件到eventbus,调用错误的事件会导致panic

Subscription 订阅器

接口注释
io.Closer关闭接口
Out() <-chan interface{}返回一个用来消费事件的管道

Bus 总线

接口注释
Subscribe(eventType interface{}, opts …SubscriptionOpt) (Subscription, error)订阅事件
Emitter(eventType interface{}, opts …EmitterOpt) (Emitter, error)根据事件创建一个触发器
GetAllEventTypes() []reflect.Type返回所有的事件类型

Host 主机

接口注释
ID() peer.ID返回本地节点id
Peerstore() peerstore.Peerstore返回节点存储的信息(地址,key…)
Addrs() []ma.Multiaddr返回主机坚挺的地址集合
NetWork() network.Network返回主机的网络接口
Mux() protocol.Switch返回入流的多路复用器
Connect(ctx context.Context, pi peer.AddrInfo) error连接地址
SetStreamHandler(pid protocol.ID, handler network.StreamHandler)设置流处理器
SetStreamHandlerMatch(protocol.ID, func(string) bool, network.StreamHandler)设置流处理器匹配
RemoveStreamHandler(pid protocol.ID)设置流处理器
NewStream(ctx context.Context, p peer.ID, pids …protocol.ID) (network.Stream, error)新建流
Close() error关闭网络和服务
ConnManager() connmgr.ConnManager返回端点的连接管理器
EventBus() event.Bus返回端点的事件总线

IntrospectableHost

接口注释
Introspector() introspection.Introspector?
IntrospectionEndpoint() introspection.Endpoint?

Reporter 报告器

接口注释
LogSentMessage(int64)统计发消息大小
LogRecvMessage(int64)统计收消息大小
LogSentMessageStream(int64, protocol.ID, peer.ID)统计发消息流
LogRecvMessageStream(int64, protocol.ID, peer.ID)统计收消息流
GetBandwidthForPeer(peer.ID) Stats获得节点的带宽
GetBandwidthForProtocol(protocol.ID) Stats获得协议的带宽
GetBandwidthTotals() Stats获得总带宽
GetBandwidthByPeer() map[peer.ID]Stats获得所有节点对应的带宽
GetBandwidthByProtocol() map[protocol.ID]Stats获得所有协议对应的带宽

MuxedStream 多路流

接口注释
io.Reader读接口
io.Writer写接口
io.Closer关闭接口
Reset() error重置
SetDeadline(time.Time) error设置过期时间
SetReadDeadline(time.Time) error设置读过期时间
SetWriteDeadline(time.Time) error设置写过期时间

MuxedConn 多路连接

接口注释
io.Closer关闭接口
IsClosed() bool连接是否已关闭
OpenStream() (MuxedStream, error)打开流
AcceptStream() (MuxedStream, error)接收流

Multiplexer 多路调制器

接口注释
NewConn(c net.Conn, isServer bool) (MuxedConn, error)新建连接

Conn 连接

接口注释
io.Closer关闭器
ConnSecurity连接鉴别器
ConnMultiaddrs连接的地址
ID() string连接的id
NewStream() (Stream, error)新建流
GetStreams() []Stream获得连接的所有流
Stat() Stat返回连接的状态

ConnSecurity 连接的可靠性信息

接口注释
LocalPeer() peer.ID本机节点
LocalPrivateKey() ic.PrivKey返回本机私钥
RemotePeer() peer.ID返回远程节点
RemotePublicKey() ic.PubKey返回远程节点公钥

ConnMultiaddrs 连接的多地址

接口注释
LocalMultiaddr() ma.Multiaddr返回本机的多节点地址
RemoteMultiaddr() ma.Multiaddr返回远程的多节点地址

Network 连接

接口注释
Dialer拨号器
io.Closer关闭器
SetStreamHandler(StreamHandler)设置流回调器
SetConnHandler(ConnHandler)设置连接回调器
NewStream(context.Context, peer.ID) (Stream, error)新建流
Listen(…ma.Multiaddr) error监听地址
ListenAddresses() []ma.Multiaddr返回监听地址
InterfaceListenAddresses() ([]ma.Multiaddr, error)-
Process() goprocess.Process返回网络的进程

Dialer 拨号器

接口注释
Peerstore() peerstore.Peerstore节点存储
LocalPeer() peer.ID返回关联网络的本地节点
DialPeer(context.Context, peer.ID) (Conn, error)向节点拨号并建立连接
ClosePeer(peer.ID) error关闭节点连接
Connectedness(peer.ID) Connectedness-
Peers() []peer.ID返回已连接的节点id集合
Conns() []Conn返回连接集合
ConnsToPeer(p peer.ID) []Conn根据节点id的连接集合
Notify(Notifiee)通知
StopNotify(Notifiee)停止通知

Notifiee 通知

接口注释
Listen(Network, ma.Multiaddr)监听
ListenClose(Network, ma.Multiaddr)关闭监听
Connected(Network, Conn)连接打开通知
Disconnected(Network, Conn)连接关闭通知
OpenedStream(Network, Stream)流打开通知
ClosedStream(Network, Stream)流关闭通知

Stream 流

接口注释
mux.MuxedStream多路流
ID() string返回流id
Protocol() protocol.ID返回流协议id
SetProtocol(id protocol.ID)设置流协议id
Stat() Stat返回流状态
Conn() Conn返回流连接

Peerstore 节点存储

接口注释
io.Closer关闭器
AddrBook地址簿
KeyBookkey薄
PeerMetadata节点数据
Metrics-
ProtoBook协议薄
PeerInfo(peer.ID) peer.AddrInfo根据节点id返回节点地址信息
Peers() peer.IDSlice返回所有节点

PeerMetadata 节点元数据

接口注释
Get(p peer.ID, key string) (interface{}, error)拿元数据
Put(p peer.ID, key string, val interface{}) error放元数据

AddrBook 地址簿

接口注释
AddAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration)添加地址
AddAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration)添加地址集合
SetAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration)设置节点地址
SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration)设置地址集合
UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL time.Duration)更新地址集合
Addrs(p peer.ID) []ma.Multiaddr返回地址集合
AddrStream(context.Context, peer.ID) <-chan ma.Multiaddr添加流
ClearAddrs(p peer.ID)清空节点地址集合
PeersWithAddrs() peer.IDSlice-

CertifiedAddrBook 加密地址本

接口注释
ConsumePeerRecord(s *record.Envelope, ttl time.Duration) (accepted bool, err error)?
GetPeerRecord(p peer.ID) *record.Envelope?

KeyBook 钥匙本

接口注释
PubKey(peer.ID) ic.PubKey根据节点id返回公钥
AddPubKey(peer.ID, ic.PubKey)添加公钥
PrivKey(peer.ID) ic.PrivKey根据节点id返回私钥
AddPrivKey(peer.ID, ic.PrivKey) error添加私钥
PeersWithKeys() peer.IDSlice?

Metrics 度量器

接口注释
RecordLatency(peer.ID, time.Duration)?
LatencyEWMA(peer.ID) time.Duration?

ProtoBook 协议本

接口注释
GetProtocols(peer.ID) ([]string, error)根据节点id拿协议
AddProtocols(peer.ID, …string) error添加协议
SetProtocols(peer.ID, …string) error设置协议
RemoveProtocols(peer.ID, …string) error删除协议
SupportsProtocols(peer.ID, …string) ([]string, error)返回节点支持的协议
FirstSupportedProtocol(peer.ID, …string) (string, error)第一个支持的协议

Router 路由器

接口注释
AddHandler(protocol string, handler HandlerFunc)给协议添加回调函数
AddHandlerWithFunc(protocol string, match func(string) bool, handler HandlerFunc)设置匹配的回调函数
RemoveHandler(protocol string)移除协议的回调函数
Protocols() []string返回路由器节点集合

Negotiator 协调器

接口注释
NegotiateLazy(rwc io.ReadWriteCloser) (io.ReadWriteCloser, string, HandleFunc, error)消极协商(阻塞)
Negotiate(rwc io.ReadWriteCloser) (string, HandleFunc, error)协商
Handle(rwc io.ReadWriteCloser) error读/写关闭回调

Switch 交换机

接口注释
Router路由器
Negotiator协调器

Record 记录

接口注释
Domain() string
Codec() []byte?
MarshalRecord() ([]byte, error)序列化record为二进制数组
UnmarshalRecord([]byte) error反序列二进制数组为record

ContentRouting 内容路由

接口注释
Provide(context.Context, cid.Cid, bool) error将cid验证并加入路由系统,如果失败,保存在本地
FindProvidersAsync(context.Context, cid.Cid, int) <-chan peer.AddrInfo-

PeerRouting 节点路由

接口注释
FindPeer(context.Context, peer.ID) (peer.AddrInfo, error)根据ID搜索节点

ValueStore 值存储

接口注释
PutValue(context.Context, string, []byte, …Option) error根据key放值
GetValue(context.Context, string, …Option) ([]byte, error)根据key拿值
SearchValue(context.Context, string, …Option) (<-chan []byte, error)根据key查询值

Routing 路由

接口注释
ContentRouting内容路由
PeerRouting节点路由
ValueStore值存储
Bootstrap(context.Context) error-

PubKeyFetcher 公钥抓取器

接口注释
GetPublicKey(context.Context, peer.ID) (ci.PubKey, error)根据节点id拿公钥

SecureConn 可靠的连接

接口注释
net.Conn连接
ConnSecurity连接可靠性信息

SecureTransport 可靠的传输

接口注释
SecureInbound(ctx context.Context, insecure net.Conn) (SecureConn, error)验证一个输入连接
SecureOutbound(ctx context.Context, insecure net.Conn, p peer.ID) (SecureConn, error)验证一个输出连接

CapableConn 可伸缩连接

接口注释
mux.MuxedConn多路连接
network.ConnSecurity连接验证
network.ConnMultiaddrs连接地址
Transport() Transport返回连接所属的传输方式

Transport 传输

接口注释
Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (CapableConn, error)拨号
CanDial(addr ma.Multiaddr) bool判断地址能否拨号
Listen(laddr ma.Multiaddr) (Listener, error)监听地址
Protocols() []int返回协议
Proxy() bool代理

Listener 监听器

接口注释
Accept() (CapableConn, error)接收监听
Close() error关闭监听
Addr() net.Addr返回监听地址
Multiaddr() ma.Multiaddr返回多地址

TransportNetwork 传输网络

接口注释
network.Network网络
AddTransport(t Transport) error添加传输

定义类

DecayingValue 过期标签

名字类型注释
TagDecayingTag衰退标记
Peerpeer.ID节点id
Addedtime.Time添加时间
LastVisittime.Time最后一次访问时间
Valueint当前标记值

TagInfo 标签信息

名字类型注释
FirstSeentime.Time标记时间
Valueint标记值
Tagsmap[string]int标记集合
Connsmap[string]time.Time连接集合

Options 选项集合

名字类型注释
Tt1time.Duation时长
Limitint限制
Othermap[interface{}]interface{}其它选项集合
Apply(options …Option) errorfunc应用选项
TTL(ttl time.Duration) Optionfunc-
Limmit(limit int) Optionfunc设置限制

UpdatedAddress 更新地址集合

名字类型注释
Addressgo-multiaddr.Multiaddr多地址
ActionAddrAction地址动作

BandwidthCounter 带宽统计器

名字类型注释
totalInflow.Meter总收包消息数量路流
totalOutflow.Meter总发包消息数量
protocolInflow.MeterRegister收包协议的消息数量
protocolOutflow.MeterRegister发包协议的消息数量
peerInflow.MeterRegister收包节点
peerOutflow.MeterRegister发包节点
LogSentMessage(size int64)func发消息数量统计
LogRecvMessage(size int64)func收消息数量统计
LogSentMessageStream(size int64, proto protocol.ID, p peer.ID)func发消息数量统计,所属协议统计
LogRecvMessageStream(size int64, proto protocol.ID, p peer.ID)func收消息数量统计,所属协议统计
LogGetBandwidthForPeer(p peer.ID) (out Stats)func返回节点的带宽信息
GetBandwidthForProtocol(proto protocol.ID) (out Stats)func返回协议带宽
GetBandwidthTotals() (out Stats)func获得带宽总计
GetBandwidthByPeer() map[peer.ID]Statsfunc获得所有节点的带宽信息
GetBandwidthByProtocol() map[protocol.ID]Statsfunc获得所有协议的带宽信息
Reset()func重置信息
TrimIdle(since time.Time)func减去since以前的统计信息

Stats 带宽状态

名字类型注释
TotalInint64收包消息数量
TotalOutint64发包消息数量
RateInfloat64收包速率
RateOutfloat64发包速率

Stat

名字类型注释
DirectionDirection标识是入或出的连接
Openedtime.Time连接打开时间
Extramap[interface{}]interface{}保存的连接信息

NotifyBundle 通知绑定

名字类型注释
Listen(n Network, a ma.Multiaddr)func监听
ListenClose(n Network, a ma.Multiaddr)func关闭监听
Connected(n Network, c Conn)func已连接
Disconnected(n Network, c Conn)func关闭连接
OpenedStream(n Network, s Stream)func打开流
ClosedStream(n Network, s Stream)func关闭流

AddrInfo 地址信息

名字类型注释
IDID-
Addrs[]go-multiaddr.Multiaddr地址
Loggable() map[string]interface{}func打印
MarshalJSON() ([]byte, error)地址信息转json
UnmarshalJSON(b []byte) errorjson转回地址信息

ID 节点id

名字类型注释
Pretty() stringfunc编码为58位的string
Loggable() map[string]interface{}func打日志
String() stringfunc返回节点的string
ShortString() stringfunc返回短string
MatchesPrivateKey(sk ic.PrivKey) boolfunc私钥配对
MatchesPublicKey(pk ic.PubKey) boolfunc公钥配对
ExtractPublicKey() (ic.PubKey, error)func从id(multi_hash)中提取公钥
Validate() errorfunc检查节点id是否为空
Marshal() ([]byte, error)funcid强转字节数组
MarshalBinary() ([]byte, error)funcid序列化位字节数组
MarshalTo(data []byte) (n int, err error)序列化
Unmarshal(data []byte) (err error)反序列化
UnmarshalBinary(data []byte) error反序列化
Size() int尺寸
MarshalJSON() ([]byte, error)序列化为json
UnmarshalJSON(data []byte) (error)反序列化json
MarshalText() ([]byte, error)序列化文本
UnmarshalText(data []byte) error反序列化文本

PeerRecord 节点记录

名字类型注释
PeerIDID节点id
Addrs[]go-multiaddr.Multiaddr地址集合
Sequint64?
Domain() stringfunc?
Codec() []bytefunc?
UnmarshalRecord(bytes []byte) errorfunc?
MarshalRecord() ([]byte, error)func?
Equal(other *PeerRecord) boolfunc?
ToProtobuf() (*pb.PeerRecord, error)func?

Envelope

名字类型注释
PublicKeycrypto.PubKey-
PayloadType[]byte-
RawPayload[]byte-
signature[]byte-
cachedRecord-
unmarshalErrorerror-
unmarshalOncesync.Once-
Marshal() ([]byte, error)func序列化成protobuf
Equal(other *Envelope) boolfunc-
Record() (Record, error)func-
TypeReord(domain string) errorfunc-
validate(domain string) errorfunc-

Options 选项

名字类型注释
Expiredbool是否过期
Offlinebool是否掉线
Othermap[interface{}]interface{}其它选项
Apply(options …Option) errorfunc采取选项
ToOption()func复制一个选项

QueryEvent 查询事件

名字类型注释
IDpeer.ID事件id
TypeQueryEventType事件类型
Responses[]*peer.AddrInfo响应集合
Extrastring-
MarshalJSON() ([]byte, error)func将事件转为json
UnmarshalJSON(b []byte) errorfunc将json解析为事件

Transport

名字类型注释
idpeer.IDid
keyci.PrivKey私钥
LocalPeer() peer.IDfunc返回本地id
LocalPrivateKey() ci.PrivKeyfunc返回本地私钥
SecureInbound(ctx context.Context, insecure net.Conn) (sec.SecureConn, error)func通过握手让输入可靠
SecureOutbound(ctx context.Context, insecure net.Conn, p peer.ID) (sec.SecureConn, error)通过握手让输出可靠

Conn

名字类型注释
-net.Conn继承自网络连接
localpeer.ID本机节点id
remotepeer.ID远程节点id
localPrivKeyci.PrivKey本机私钥
remotePubKeyci.PubKey远程公钥
LocalPeer() peer.IDfunc返回本机节点id
RemotePeer() peer.IDfunc返回远程节点id
RemotePublicKey() ci.PubKeyfunc返回远程节点公钥
LocalPrivateKey() ci.PrivKeyfunc返回本地节点私钥
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值