Documentation
¶
Overview ¶
Package p2p 提供面向 P2P 数据通道的传输无关抽象:把 WebRTC DataChannel 从 "媒体通话工具"变为"通用 P2P 数据管道",支持可靠/不可靠双通道语义。
设计思路:
- 可靠通道:聊天消息、RPC 请求、游戏事件(不能丢、保序)
- 不可靠通道:位置同步、输入帧、状态快照(丢了无所谓,要最新值)
本包只定义接口与领域类型;具体传输由子包实现:
- WebRTC DataChannel(浏览器可达):pkg/p2p/signaling 处理信令
- QUIC(纯原生/服务端场景):复用 pkg/quic
边界(机制而非策略):本包不处理鉴权、房间模型、消息序列化——那些是 policy,留给上层。
Index ¶
- type LocalNetwork
- func (n *LocalNetwork) AddPeer(conn PeerConn)
- func (n *LocalNetwork) Broadcast(data []byte, reliable bool) error
- func (n *LocalNetwork) Close() error
- func (n *LocalNetwork) Events() <-chan PeerEvent
- func (n *LocalNetwork) LocalID() PeerID
- func (n *LocalNetwork) Peer(id PeerID) PeerConn
- func (n *LocalNetwork) Peers() []PeerConn
- func (n *LocalNetwork) RemovePeer(id PeerID)
- type Message
- type Network
- type PeerConn
- type PeerEvent
- type PeerID
- type PeerState
- type Transport
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type LocalNetwork ¶
type LocalNetwork struct {
// contains filtered or unexported fields
}
LocalNetwork 是 Network 的内存实现,管理一组 PeerConn。 信令/拓扑层通过 AddPeer/RemovePeer 驱动;业务层通过 Network 接口消费。
func NewLocalNetwork ¶
func NewLocalNetwork(localID PeerID, eventBuf int) *LocalNetwork
NewLocalNetwork 创建一个本地 P2P 网络实例。eventBuf 决定事件通道缓冲大小。
func (*LocalNetwork) AddPeer ¶
func (n *LocalNetwork) AddPeer(conn PeerConn)
AddPeer 将一条已建立的连接登记到网络。由信令/拓扑层调用。
func (*LocalNetwork) Broadcast ¶
func (n *LocalNetwork) Broadcast(data []byte, reliable bool) error
Broadcast 向所有已连接 peer 广播。
func (*LocalNetwork) Events ¶
func (n *LocalNetwork) Events() <-chan PeerEvent
Events 返回 peer 生命周期事件通道。
func (*LocalNetwork) RemovePeer ¶
func (n *LocalNetwork) RemovePeer(id PeerID)
RemovePeer 从网络移除一个 peer(不关闭其连接——由调用方决定是否 Close)。
type Message ¶
type Message struct {
From PeerID // 发送方 peer ID
Data []byte // 载荷
Reliable bool // true=通过可靠通道到达; false=通过不可靠通道到达
}
Message 是从 peer 收到的一条消息。
type Network ¶
type Network interface {
// LocalID 返回本节点的 peer ID。
LocalID() PeerID
// Peers 返回当前已连接的所有 peer。
Peers() []PeerConn
// Peer 按 ID 获取已连接的 peer;不存在返回 nil。
Peer(id PeerID) PeerConn
// Events 返回 peer 生命周期事件通道。
Events() <-chan PeerEvent
// Broadcast 向所有已连接的 peer 广播。reliable 决定走哪条通道。
// 返回第一个遇到的错误(或 nil);部分 peer 发送失败不影响其余。
Broadcast(data []byte, reliable bool) error
// Close 关闭网络(断开所有 peer 连接)。
Close() error
}
Network 是一个 P2P 网络视图:管理多条 PeerConn 的集合。 上层(如信令服务)负责驱动连接建立;Network 提供已建立连接的访问与事件通知。
type PeerConn ¶
type PeerConn interface {
// ID 返回远端 peer 的标识。
ID() PeerID
// SendReliable 通过可靠有序通道发送数据(类似 TCP 语义)。
SendReliable(data []byte) error
// SendUnreliable 通过不可靠无序通道发送数据(类似 UDP 语义)。
// 超过底层 MTU 的负载可能被丢弃或返回错误——大负载走 SendReliable。
SendUnreliable(data []byte) error
// Recv 返回接收通道;关闭连接后通道会被关闭。
Recv() <-chan Message
// Context 返回连接生命周期 ctx(连接断开时取消)。
Context() context.Context
// Close 关闭连接。幂等。
Close() error
}
PeerConn 是一条到远端 peer 的双通道连接(可靠 + 不可靠)。 实现者须保证 SendReliable/SendUnreliable 并发安全。
type Transport ¶
type Transport interface {
io.Closer
// Connect 主动向目标 peer 发起连接。地址解析由具体实现负责(如通过构造时传入的地址簿)。
Connect(ctx context.Context, peerID PeerID) (PeerConn, error)
// Accept 阻塞等待一个入站的 peer 连接。Transport 关闭后返回错误。
Accept(ctx context.Context) (PeerConn, error)
// Addr 返回本 Transport 的监听地址(可用于告知其他 peer 如何连接本节点)。
Addr() string
}
Transport 是对底层传输能力的抽象,用于可插拔实现(WebRTC / QUIC / TCP)。 每个 Transport 既能主动连接远端 peer,也能接受入站连接。
Directories
¶
| Path | Synopsis |
|---|---|
|
Package quictransport 提供基于 QUIC 的 p2p.Transport 实现。
|
Package quictransport 提供基于 QUIC 的 p2p.Transport 实现。 |
|
Package signaling 提供面向 P2P DataChannel 的信令服务:通过 WebSocket 中继 WebRTC 协商消息(offer/answer/candidate),让 peers 能自动发现、配对、建立 直连的 DataChannel——无需业务代码接触底层 ICE/SDP 细节。
|
Package signaling 提供面向 P2P DataChannel 的信令服务:通过 WebSocket 中继 WebRTC 协商消息(offer/answer/candidate),让 peers 能自动发现、配对、建立 直连的 DataChannel——无需业务代码接触底层 ICE/SDP 细节。 |
|
Package tcptransport 提供基于 TCP 的 p2p.Transport 实现。
|
Package tcptransport 提供基于 TCP 的 p2p.Transport 实现。 |
|
Package topology 提供 P2P 网络的拓扑策略:当 peer 加入/离开房间时,决定哪些 peer 之间应建立直连。
|
Package topology 提供 P2P 网络的拓扑策略:当 peer 加入/离开房间时,决定哪些 peer 之间应建立直连。 |