micro/network/network.go
2019-07-07 10:10:38 +01:00

67 lines
1.6 KiB
Go

// Package network is a package for defining a network overlay
package network
import (
"github.com/micro/go-micro/config/options"
)
// Network defines a network interface. The network is a single
// shared network between all nodes connected to it. The network
// is responsible for routing messages to the correct services.
type Network interface {
options.Options
// Name of the network
Name() string
// Connect to the network
Connect() (Node, error)
// Peer with a neighboring network
Peer(Network) (Link, error)
}
// Node represents a single node on a network
type Node interface {
// Id of the node
Id() string
// Address of the node
Address() string
// The network of the node
Network() string
// Close the network connection
Close() error
// Accept messages on the network
Accept() (*Message, error)
// Send a message to the network
Send(*Message) error
}
// Link is a connection between one network and another
type Link interface {
// remote node the link is peered with
Node
// length defines the speed or distance of the link
Length() int
// weight defines the saturation or usage of the link
Weight() int
}
// Message is the base type for opaque data
type Message struct {
// Headers which provide local/remote info
Header map[string]string
// The opaque data being sent
Body []byte
}
var (
// The default network name is local
DefaultName = "local"
// just the standard network element
DefaultNetwork = NewNetwork()
)
// NewNetwork returns a new network interface
func NewNetwork(opts ...options.Option) Network {
return newNetwork(opts...)
}