transport

package
v3.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 13, 2020 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Package transport is an interface for synchronous connection based communication

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client interface {
	Socket
}

Client is the socket owner

type DialOption

type DialOption func(*DialOptions)

DialOption is the option signature

func WithStream

func WithStream() DialOption

WithStream indicates whether this is a streaming connection

func WithTimeout

func WithTimeout(d time.Duration) DialOption

WithTimeout used when dialling the remote side

type DialOptions

type DialOptions struct {
	// Tells the transport this is a streaming connection with
	// multiple calls to send/recv and that send may not even be called
	Stream bool
	// Timeout for dialing
	Timeout time.Duration

	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

DialOptions struct

func NewDialOptions

func NewDialOptions(opts ...DialOption) DialOptions

NewDialOptions returns new DialOptions

type ListenOption

type ListenOption func(*ListenOptions)

ListenOption is the option signature

type ListenOptions

type ListenOptions struct {

	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

ListenOptions struct

func NewListenOptions

func NewListenOptions(opts ...ListenOption) ListenOptions

NewListenOptions returns new ListenOptions

type Listener

type Listener interface {
	Addr() string
	Close() error
	Accept(func(Socket)) error
}

Listener is the interface for stream oriented messaging

type Message

type Message struct {
	Header map[string]string
	Body   []byte
}

Message is used to transfer data

type Option

type Option func(*Options)

Option is the option signature

func Addrs

func Addrs(addrs ...string) Option

Addrs to use for transport

func Codec

func Codec(c codec.Marshaler) Option

Codec sets the codec used for encoding where the transport does not support message headers

func Context

func Context(ctx context.Context) Option

Context sets the context

func Logger

func Logger(l logger.Logger) Option

Logger sets the logger

func Secure

func Secure(b bool) Option

Use secure communication. If TLSConfig is not specified we use InsecureSkipVerify and generate a self signed cert

func TLSConfig

func TLSConfig(t *tls.Config) Option

TLSConfig to be used for the transport.

func Timeout

func Timeout(t time.Duration) Option

Timeout sets the timeout for Send/Recv execution

type Options

type Options struct {
	// Addrs is the list of intermediary addresses to connect to
	Addrs []string
	// Codec is the codec interface to use where headers are not supported
	// by the transport and the entire payload must be encoded
	Codec codec.Marshaler
	// Secure tells the transport to secure the connection.
	// In the case TLSConfig is not specified best effort self-signed
	// certs should be used
	Secure bool
	// TLSConfig to secure the connection. The assumption is that this
	// is mTLS keypair
	TLSConfig *tls.Config
	// Timeout sets the timeout for Send/Recv
	Timeout time.Duration
	// Logger
	Logger logger.Logger
	// Other options for implementations of the interface
	// can be stored in a context
	Context context.Context
}

func NewOptions

func NewOptions(opts ...Option) Options

NewOptions returns new options

type Socket

type Socket interface {
	Recv(*Message) error
	Send(*Message) error
	Close() error
	Local() string
	Remote() string
}

Socket bastraction interface

type Transport

type Transport interface {
	Init(...Option) error
	Options() Options
	Dial(ctx context.Context, addr string, opts ...DialOption) (Client, error)
	Listen(ctx context.Context, addr string, opts ...ListenOption) (Listener, error)
	String() string
}

Transport is an interface which is used for communication between services. It uses connection based socket send/recv semantics and has various implementations; http, grpc, quic.

var (
	// DefaultTransport is the global default transport
	DefaultTransport Transport = NewTransport()
	// Default dial timeout
	DefaultDialTimeout = time.Second * 5
)

func NewTransport

func NewTransport(opts ...Option) Transport

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL