Documentation
¶
Index ¶
- Variables
- func Connectedness(c Message_ConnectionType) network.Connectedness
- func PBPeerToPeerInfo(pbp Message_Peer) peer.AddrInfo
- func PBPeersToPeerInfos(pbps []Message_Peer) []*peer.AddrInfo
- type Message
- func (*Message) Descriptor() ([]byte, []int)
- func (m *Message) GetCloserPeers() []Message_Peer
- func (m *Message) GetClosestPeers() *Message_ClosestPeers
- func (m *Message) GetClusterLevel() int
- func (m *Message) GetClusterLevelRaw() int32
- func (m *Message) GetKey() []byte
- func (m *Message) GetProviderPeers() []Message_Peer
- func (m *Message) GetRecord() *pb.Record
- func (m *Message) GetType() Message_MessageType
- func (m *Message) GetValue() []byte
- func (m *Message) Marshal() (dAtA []byte, err error)
- func (m *Message) MarshalTo(dAtA []byte) (int, error)
- func (m *Message) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Message) ProtoMessage()
- func (m *Message) Reset()
- func (m *Message) SetClusterLevel(level int)
- func (m *Message) Size() (n int)
- func (m *Message) String() string
- func (m *Message) Unmarshal(dAtA []byte) error
- func (m *Message) XXX_DiscardUnknown()
- func (m *Message) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Message) XXX_Merge(src proto.Message)
- func (m *Message) XXX_Size() int
- func (m *Message) XXX_Unmarshal(b []byte) error
- type MessageSender
- type MessageSenderWithDisconnect
- type Message_ClosestPeers
- func (*Message_ClosestPeers) Descriptor() ([]byte, []int)
- func (m *Message_ClosestPeers) GetMode() int32
- func (m *Message_ClosestPeers) GetSelf() []byte
- func (m *Message_ClosestPeers) Marshal() (dAtA []byte, err error)
- func (m *Message_ClosestPeers) MarshalTo(dAtA []byte) (int, error)
- func (m *Message_ClosestPeers) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Message_ClosestPeers) ProtoMessage()
- func (m *Message_ClosestPeers) Reset()
- func (m *Message_ClosestPeers) Size() (n int)
- func (m *Message_ClosestPeers) String() string
- func (m *Message_ClosestPeers) Unmarshal(dAtA []byte) error
- func (m *Message_ClosestPeers) XXX_DiscardUnknown()
- func (m *Message_ClosestPeers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Message_ClosestPeers) XXX_Merge(src proto.Message)
- func (m *Message_ClosestPeers) XXX_Size() int
- func (m *Message_ClosestPeers) XXX_Unmarshal(b []byte) error
- type Message_ConnectionType
- type Message_MessageType
- type Message_Peer
- func (m *Message_Peer) Addresses() []ma.Multiaddr
- func (*Message_Peer) Descriptor() ([]byte, []int)
- func (m *Message_Peer) GetAddrs() [][]byte
- func (m *Message_Peer) GetConnection() Message_ConnectionType
- func (m *Message_Peer) Marshal() (dAtA []byte, err error)
- func (m *Message_Peer) MarshalTo(dAtA []byte) (int, error)
- func (m *Message_Peer) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Message_Peer) ProtoMessage()
- func (m *Message_Peer) Reset()
- func (m *Message_Peer) Size() (n int)
- func (m *Message_Peer) String() string
- func (m *Message_Peer) Unmarshal(dAtA []byte) error
- func (m *Message_Peer) XXX_DiscardUnknown()
- func (m *Message_Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Message_Peer) XXX_Merge(src proto.Message)
- func (m *Message_Peer) XXX_Size() int
- func (m *Message_Peer) XXX_Unmarshal(b []byte) error
- type PeerRoutingInfo
- type ProtocolMessenger
- func (pm *ProtocolMessenger) GetClosestPeers(ctx context.Context, p peer.ID, id peer.ID, value []byte) (closerPeers []*peer.AddrInfo, err error)
- func (pm *ProtocolMessenger) GetProviders(ctx context.Context, p peer.ID, key multihash.Multihash) (provs []*peer.AddrInfo, closerPeers []*peer.AddrInfo, err error)
- func (pm *ProtocolMessenger) GetValue(ctx context.Context, p peer.ID, key string) (record *recpb.Record, closerPeers []*peer.AddrInfo, err error)
- func (pm *ProtocolMessenger) Ping(ctx context.Context, p peer.ID) (err error)
- func (pm *ProtocolMessenger) PutProvider(ctx context.Context, p peer.ID, key multihash.Multihash, host host.Host) (err error)
- func (pm *ProtocolMessenger) PutValue(ctx context.Context, p peer.ID, rec *recpb.Record) (err error)
- type ProtocolMessengerOption
Constants ¶
This section is empty.
Variables ¶
var ( ErrInvalidLengthDht = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowDht = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupDht = fmt.Errorf("proto: unexpected end of group") )
var Message_ConnectionType_name = map[int32]string{
0: "NOT_CONNECTED",
1: "CONNECTED",
2: "CAN_CONNECT",
3: "CANNOT_CONNECT",
}
var Message_ConnectionType_value = map[string]int32{
"NOT_CONNECTED": 0,
"CONNECTED": 1,
"CAN_CONNECT": 2,
"CANNOT_CONNECT": 3,
}
var Message_MessageType_name = map[int32]string{
0: "PUT_VALUE",
1: "GET_VALUE",
2: "ADD_PROVIDER",
3: "GET_PROVIDERS",
4: "FIND_NODE",
5: "PING",
}
var Message_MessageType_value = map[string]int32{
"PUT_VALUE": 0,
"GET_VALUE": 1,
"ADD_PROVIDER": 2,
"GET_PROVIDERS": 3,
"FIND_NODE": 4,
"PING": 5,
}
Functions ¶
func Connectedness ¶
func Connectedness(c Message_ConnectionType) network.Connectedness
Connectedness 函数返回与 Message_ConnectionType 关联的 network.Connectedness。
func PBPeerToPeerInfo ¶
func PBPeerToPeerInfo(pbp Message_Peer) peer.AddrInfo
PBPeerToPeerInfo 将 *Message_Peer 转换为其 peer.AddrInfo 对应项
func PBPeersToPeerInfos ¶
func PBPeersToPeerInfos(pbps []Message_Peer) []*peer.AddrInfo
PBPeersToPeerInfos 将给定的 []*Message_Peer 转换为 []peer.AddrInfo 无效的地址将被静默忽略。
Types ¶
type Message ¶
type Message struct {
ClosestPeers *Message_ClosestPeers `protobuf:"bytes,11,opt,name=closestPeers,proto3" json:"closestPeers,omitempty"`
// 定义它是什么类型的消息。
Type Message_MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=dht.pb.Message_MessageType" json:"type,omitempty"`
// 定义此查询/响应属于哪个珊瑚簇级别。
// 如果我们将来想实现珊瑚的簇环。
ClusterLevelRaw int32 `protobuf:"varint,10,opt,name=clusterLevelRaw,proto3" json:"clusterLevelRaw,omitempty"`
// 用于指定与该消息关联的密钥。
// PUT_VALUE, GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"`
// 用于传输附加值
Value []byte `protobuf:"bytes,12,opt,name=value,proto3" json:"value,omitempty"`
// 用于返回一个值
// PUT_VALUE, GET_VALUE
Record *pb.Record `protobuf:"bytes,3,opt,name=record,proto3" json:"record,omitempty"`
// 用于返回更接近查询中的键的对等点
// GET_VALUE, GET_PROVIDERS, FIND_NODE
CloserPeers []Message_Peer `protobuf:"bytes,8,rep,name=closerPeers,proto3" json:"closerPeers"`
// 用于返回Provider
// GET_VALUE, ADD_PROVIDER, GET_PROVIDERS
ProviderPeers []Message_Peer `protobuf:"bytes,9,rep,name=providerPeers,proto3" json:"providerPeers"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func NewMessage ¶
func NewMessage(typ Message_MessageType, key, value []byte, level int) *Message
NewMessage 构造一个具有给定类型、键和级别的新的 DHT 消息
func (*Message) Descriptor ¶
func (*Message) GetCloserPeers ¶
func (m *Message) GetCloserPeers() []Message_Peer
func (*Message) GetClosestPeers ¶
func (m *Message) GetClosestPeers() *Message_ClosestPeers
func (*Message) GetClusterLevel ¶
GetClusterLevel 获取并调整消息中的集群级别。 需要进行 +/- 1 的调整以区分有效的第一级 (1) 和默认的 "无值" 的 protobuf 行为 (0)。
func (*Message) GetClusterLevelRaw ¶
func (*Message) GetProviderPeers ¶
func (m *Message) GetProviderPeers() []Message_Peer
func (*Message) GetType ¶
func (m *Message) GetType() Message_MessageType
func (*Message) MarshalToSizedBuffer ¶
func (*Message) ProtoMessage ¶
func (*Message) ProtoMessage()
func (*Message) SetClusterLevel ¶
SetClusterLevel 调整并设置消息中的集群级别。 需要进行 +/- 1 的调整以区分有效的第一级 (1) 和默认的 "无值" 的 protobuf 行为 (0)。
func (*Message) XXX_DiscardUnknown ¶
func (m *Message) XXX_DiscardUnknown()
func (*Message) XXX_Marshal ¶
func (*Message) XXX_Unmarshal ¶
type MessageSender ¶
type MessageSender interface {
// SendRequest 向对等方发送消息并等待其响应
SendRequest(ctx context.Context, p peer.ID, pmes *Message) (*Message, error)
// SendMessage 向对等方发送消息而不等待响应
SendMessage(ctx context.Context, p peer.ID, pmes *Message) error
}
MessageSender 处理向给定对等方发送有线协议消息
type MessageSenderWithDisconnect ¶
type MessageSenderWithDisconnect interface {
MessageSender
OnDisconnect(context.Context, peer.ID)
}
type Message_ClosestPeers ¶
type Message_ClosestPeers struct {
Self []byte `protobuf:"bytes,1,opt,name=self,proto3" json:"self,omitempty"`
Mode int32 `protobuf:"varint,2,opt,name=mode,proto3" json:"mode,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
新增的 ClosestPeers 数据结构,用于节点发现时握手
func (*Message_ClosestPeers) Descriptor ¶
func (*Message_ClosestPeers) Descriptor() ([]byte, []int)
func (*Message_ClosestPeers) GetMode ¶
func (m *Message_ClosestPeers) GetMode() int32
func (*Message_ClosestPeers) GetSelf ¶
func (m *Message_ClosestPeers) GetSelf() []byte
func (*Message_ClosestPeers) Marshal ¶
func (m *Message_ClosestPeers) Marshal() (dAtA []byte, err error)
func (*Message_ClosestPeers) MarshalTo ¶
func (m *Message_ClosestPeers) MarshalTo(dAtA []byte) (int, error)
func (*Message_ClosestPeers) MarshalToSizedBuffer ¶
func (m *Message_ClosestPeers) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*Message_ClosestPeers) ProtoMessage ¶
func (*Message_ClosestPeers) ProtoMessage()
func (*Message_ClosestPeers) Reset ¶
func (m *Message_ClosestPeers) Reset()
func (*Message_ClosestPeers) Size ¶
func (m *Message_ClosestPeers) Size() (n int)
func (*Message_ClosestPeers) String ¶
func (m *Message_ClosestPeers) String() string
func (*Message_ClosestPeers) Unmarshal ¶
func (m *Message_ClosestPeers) Unmarshal(dAtA []byte) error
func (*Message_ClosestPeers) XXX_DiscardUnknown ¶
func (m *Message_ClosestPeers) XXX_DiscardUnknown()
func (*Message_ClosestPeers) XXX_Marshal ¶
func (m *Message_ClosestPeers) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*Message_ClosestPeers) XXX_Merge ¶
func (m *Message_ClosestPeers) XXX_Merge(src proto.Message)
func (*Message_ClosestPeers) XXX_Size ¶
func (m *Message_ClosestPeers) XXX_Size() int
func (*Message_ClosestPeers) XXX_Unmarshal ¶
func (m *Message_ClosestPeers) XXX_Unmarshal(b []byte) error
type Message_ConnectionType ¶
type Message_ConnectionType int32
const ( // 发送方没有与对等方的连接,并且没有额外信息(默认) Message_NOT_CONNECTED Message_ConnectionType = 0 // 发送者与对等方有实时连接 Message_CONNECTED Message_ConnectionType = 1 // 发件人最近连接到对等方 Message_CAN_CONNECT Message_ConnectionType = 2 // 发件人最近多次尝试连接对等方但连接失败 // ("try" here is loose, but this should signal "made strong effort, failed") Message_CANNOT_CONNECT Message_ConnectionType = 3 )
func ConnectionType ¶
func ConnectionType(c network.Connectedness) Message_ConnectionType
ConnectionType 返回与 network.Connectedness 关联的 Message_ConnectionType。
func (Message_ConnectionType) EnumDescriptor ¶
func (Message_ConnectionType) EnumDescriptor() ([]byte, []int)
func (Message_ConnectionType) String ¶
func (x Message_ConnectionType) String() string
type Message_MessageType ¶
type Message_MessageType int32
const ( Message_PUT_VALUE Message_MessageType = 0 Message_GET_VALUE Message_MessageType = 1 Message_ADD_PROVIDER Message_MessageType = 2 Message_GET_PROVIDERS Message_MessageType = 3 Message_FIND_NODE Message_MessageType = 4 Message_PING Message_MessageType = 5 )
func (Message_MessageType) EnumDescriptor ¶
func (Message_MessageType) EnumDescriptor() ([]byte, []int)
func (Message_MessageType) String ¶
func (x Message_MessageType) String() string
type Message_Peer ¶
type Message_Peer struct {
// 给定对等点的 ID。
Id byteString `protobuf:"bytes,1,opt,name=id,proto3,customtype=byteString" json:"id"`
// 给定对等点的多地址
Addrs [][]byte `protobuf:"bytes,2,rep,name=addrs,proto3" json:"addrs,omitempty"`
// 用于向对等方表明发送方的连接能力
Connection Message_ConnectionType `protobuf:"varint,3,opt,name=connection,proto3,enum=dht.pb.Message_ConnectionType" json:"connection,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func PeerInfosToPBPeers ¶
func PeerInfosToPBPeers(n network.Network, peers []peer.AddrInfo) []Message_Peer
PeerInfosToPBPeers 将给定的 []peer.AddrInfo 转换为 []*Message_Peer,可以写入消息并发送出去。 除了执行 PeersToPBPeers 的操作外,此函数还使用给定的 network.Network 设置 ConnectionType。
func PeerRoutingInfosToPBPeers ¶
func PeerRoutingInfosToPBPeers(peers []PeerRoutingInfo) []Message_Peer
PeerRoutingInfosToPBPeers 将给定的 []PeerRoutingInfo 转换为 []Message_Peer
func RawPeerInfosToPBPeers ¶
func RawPeerInfosToPBPeers(peers []peer.AddrInfo) []Message_Peer
RawPeerInfosToPBPeers 将一组 Peers 转换为一组 *Message_Peer,准备发送出去
func (*Message_Peer) Addresses ¶
func (m *Message_Peer) Addresses() []ma.Multiaddr
Addresses 返回与 Message_Peer 条目关联的 multiaddr
func (*Message_Peer) Descriptor ¶
func (*Message_Peer) Descriptor() ([]byte, []int)
func (*Message_Peer) GetAddrs ¶
func (m *Message_Peer) GetAddrs() [][]byte
func (*Message_Peer) GetConnection ¶
func (m *Message_Peer) GetConnection() Message_ConnectionType
func (*Message_Peer) Marshal ¶
func (m *Message_Peer) Marshal() (dAtA []byte, err error)
func (*Message_Peer) MarshalToSizedBuffer ¶
func (m *Message_Peer) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*Message_Peer) ProtoMessage ¶
func (*Message_Peer) ProtoMessage()
func (*Message_Peer) Reset ¶
func (m *Message_Peer) Reset()
func (*Message_Peer) Size ¶
func (m *Message_Peer) Size() (n int)
func (*Message_Peer) String ¶
func (m *Message_Peer) String() string
func (*Message_Peer) Unmarshal ¶
func (m *Message_Peer) Unmarshal(dAtA []byte) error
func (*Message_Peer) XXX_DiscardUnknown ¶
func (m *Message_Peer) XXX_DiscardUnknown()
func (*Message_Peer) XXX_Marshal ¶
func (m *Message_Peer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*Message_Peer) XXX_Merge ¶
func (m *Message_Peer) XXX_Merge(src proto.Message)
func (*Message_Peer) XXX_Size ¶
func (m *Message_Peer) XXX_Size() int
func (*Message_Peer) XXX_Unmarshal ¶
func (m *Message_Peer) XXX_Unmarshal(b []byte) error
type PeerRoutingInfo ¶
type PeerRoutingInfo struct {
peer.AddrInfo
network.Connectedness
}
PeerRoutingInfo 结构体定义了对等节点的路由信息
type ProtocolMessenger ¶
type ProtocolMessenger struct {
// contains filtered or unexported fields
}
ProtocolMessenger 可用于向对等方发送 DHT 消息并处理他们的响应。 这将有线协议格式与 DHT 协议实现和routing.Routing 接口的实现解耦。
注意:ProtocolMessenger 的 MessageSender 仍然需要处理一些有线协议细节,例如使用 varint 描述的 protobuf
func NewProtocolMessenger ¶
func NewProtocolMessenger(msgSender MessageSender, opts ...ProtocolMessengerOption) (*ProtocolMessenger, error)
NewProtocolMessenger 创建一个新的 ProtocolMessenger,用于向对等方发送 DHT 消息并处理他们的响应。
func (*ProtocolMessenger) GetClosestPeers ¶
func (pm *ProtocolMessenger) GetClosestPeers(ctx context.Context, p peer.ID, id peer.ID, value []byte) (closerPeers []*peer.AddrInfo, err error)
GetClosestPeers 要求对等点返回 XOR 空间中最接近 id 的 K(DHT 范围参数)DHT 服务器对等点 注意:如果peer碰巧知道另一个peerID与给定id完全匹配的peer,它将返回该peer,即使该peer不是DHT服务器节点。
func (*ProtocolMessenger) GetProviders ¶
func (pm *ProtocolMessenger) GetProviders(ctx context.Context, p peer.ID, key multihash.Multihash) (provs []*peer.AddrInfo, closerPeers []*peer.AddrInfo, err error)
GetProviders 向对等方询问其所知道的给定密钥的提供者。 还返回与该键最接近的 K 个对等点,如 GetClosestPeers 中所述。
func (*ProtocolMessenger) GetValue ¶
func (pm *ProtocolMessenger) GetValue(ctx context.Context, p peer.ID, key string) (record *recpb.Record, closerPeers []*peer.AddrInfo, err error)
GetValue 向对等方询问与给定键对应的值。 还返回与该键最接近的 K 个对等点,如 GetClosestPeers 中所述。
type ProtocolMessengerOption ¶
type ProtocolMessengerOption func(*ProtocolMessenger) error