README
¶
Peer Package
The peer package handles networking for the VM.
Network
The Network
interface implements the networking portion of the required VM interface. The VM utilizes the Network
interface to:
- Set an App Gossip handler for incoming VM gossip messages
- Set an App Request handler for incoming VM request messages
- Send App Requests to peers in the network and specify a response handler to be called upon receiving a response or failure notification
- Send App Gossip messages to the network
Client
The client utilizes the Network
interface to send requests to peers on the network and utilizes the waitingHandler
to wait until a response or failure is received from the AvalancheGo networking layer.
This allows the user of Client
to treat it as if it were returning results from the network synchronously.
result, err := client.Request(nodeID, request) // Blocks until receiving a response from the network
if err != nil {
return err
}
foo(result) // do something with the result
Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var (
ErrRequestFailed = errors.New("request failed")
)
Functions ¶
func NewPeerTracker ¶ added in v0.8.12
func NewPeerTracker() *peerTracker
Types ¶
type Network ¶
type Network interface {
validators.Connector
common.AppHandler
// RequestAny synchronously sends request to a randomly chosen peer with a
// node version greater than or equal to minVersion.
// Returns the ID of the chosen peer, and an error if the request could not
// be sent to a peer with the desired [minVersion].
RequestAny(minVersion *version.Application, message []byte, handler message.ResponseHandler) (ids.NodeID, error)
// Request sends message to given nodeID, notifying handler when there's a response or timeout
Request(nodeID ids.NodeID, message []byte, handler message.ResponseHandler) error
// Gossip sends given gossip message to peers
Gossip(gossip []byte) error
// Shutdown stops all peer channel listeners and marks the node to have stopped
// n.Start() can be called again but the peers will have to be reconnected
// by calling OnPeerConnected for each peer
Shutdown()
// SetGossipHandler sets the provided gossip handler as the gossip handler
SetGossipHandler(handler message.GossipHandler)
// SetRequestHandler sets the provided request handler as the request handler
SetRequestHandler(handler message.RequestHandler)
// Size returns the size of the network in number of connected peers
Size() uint32
// TrackBandwidth should be called for each valid request with the bandwidth
// (length of response divided by request time), and with 0 if the response is invalid.
TrackBandwidth(nodeID ids.NodeID, bandwidth float64)
}
func NewNetwork ¶
func NewNetwork(appSender common.AppSender, codec codec.Manager, self ids.NodeID, maxActiveRequests int64) Network
type NetworkClient ¶ added in v0.8.10
type NetworkClient interface {
// RequestAny synchronously sends request to a randomly chosen peer with a
// node version greater than or equal to minVersion.
// Returns response bytes, the ID of the chosen peer, and ErrRequestFailed if
// the request should be retried.
RequestAny(minVersion *version.Application, request []byte) ([]byte, ids.NodeID, error)
// Request synchronously sends request to the selected nodeID
// Returns response bytes, and ErrRequestFailed if the request should be retried.
Request(nodeID ids.NodeID, request []byte) ([]byte, error)
// Gossip sends given gossip message to peers
Gossip(gossip []byte) error
// TrackBandwidth should be called for each valid request with the bandwidth
// (length of response divided by request time), and with 0 if the response is invalid.
TrackBandwidth(nodeID ids.NodeID, bandwidth float64)
}
NetworkClient defines ability to send request / response through the Network
func NewNetworkClient ¶ added in v0.8.10
func NewNetworkClient(network Network) NetworkClient
NewNetworkClient returns Client for a given network
Click to show internal directories.
Click to hide internal directories.