smf

package
v0.0.0-...-3115fe6 Latest Latest
Warning

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

Go to latest
Published: Mar 30, 2019 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CompressionFlagsNone     = 0
	CompressionFlagsDisabled = 1
	/// brief uses zstandard 1.0
	CompressionFlagsZstd = 2
	/// lz4 is pending
	CompressionFlagsLz4 = 3
)

/ \brief: headers that are stored in an int / so they need to be inclusive. That is, you can turn on / many flags at the same time, i.e.: enable checksum and / have the payload be zlib compressed. /

View Source
const (
	HeaderBitFlagsHasPayloadHeaders = 1
)

Variables

View Source
var EnumNamesCompressionFlags = map[int]string{
	CompressionFlagsNone:     "None",
	CompressionFlagsDisabled: "Disabled",
	CompressionFlagsZstd:     "Zstd",
	CompressionFlagsLz4:      "Lz4",
}
View Source
var EnumNamesHeaderBitFlags = map[int]string{
	HeaderBitFlagsHasPayloadHeaders: "HasPayloadHeaders",
}

Functions

func BuildHeader

func BuildHeader(session uint16, body []byte, meta uint32) []byte

BuildHeader - Builds smf RPC request/response header.

func CreateHeader

func CreateHeader(builder *flatbuffers.Builder, compression int8, bitflags int8, session uint16, size uint32, checksum uint32, meta uint32) flatbuffers.UOffsetT

func DynamicHeaderAddKey

func DynamicHeaderAddKey(builder *flatbuffers.Builder, key flatbuffers.UOffsetT)

func DynamicHeaderAddValue

func DynamicHeaderAddValue(builder *flatbuffers.Builder, value flatbuffers.UOffsetT)

func DynamicHeaderEnd

func DynamicHeaderEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT

func DynamicHeaderStart

func DynamicHeaderStart(builder *flatbuffers.Builder)

func PayloadHeadersAddChecksum

func PayloadHeadersAddChecksum(builder *flatbuffers.Builder, checksum uint32)

func PayloadHeadersAddCompression

func PayloadHeadersAddCompression(builder *flatbuffers.Builder, compression int8)

func PayloadHeadersAddDynamicHeaders

func PayloadHeadersAddDynamicHeaders(builder *flatbuffers.Builder, dynamicHeaders flatbuffers.UOffsetT)

func PayloadHeadersAddSize

func PayloadHeadersAddSize(builder *flatbuffers.Builder, size uint32)

func PayloadHeadersEnd

func PayloadHeadersEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT

func PayloadHeadersStart

func PayloadHeadersStart(builder *flatbuffers.Builder)

func PayloadHeadersStartDynamicHeadersVector

func PayloadHeadersStartDynamicHeadersVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT

func WritePayload

func WritePayload(w io.Writer, session uint16, body []byte, meta uint32) (err error)

WritePayload - Writes payload to io.Writer with header.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client - SMF Client connection.

func Dial

func Dial(network, addr string) (client *Client, err error)

Dial - Dials network address and returns SMF RPC client.

func NewClient

func NewClient(conn net.Conn) *Client

NewClient - Creates new client from connection.

func (*Client) Close

func (client *Client) Close() error

Close - Closes client connetion.

func (*Client) Recv

func (client *Client) Recv() (*Header, []byte, error)

Recv - Receives response with header.

func (*Client) Send

func (client *Client) Send(req []byte, meta uint32) (err error)

Send - Sends request with header to a connection.

func (*Client) SendRecv

func (client *Client) SendRecv(req []byte, meta uint32) (resp []byte, err error)

SendRecv - Sends request and receives a response.

type DynamicHeader

type DynamicHeader struct {
	// contains filtered or unexported fields
}

/ \brief used for extra headers, ala HTTP / The use case for the core is to support / zipkin/google-Dapper style tracing

func GetRootAsDynamicHeader

func GetRootAsDynamicHeader(buf []byte, offset flatbuffers.UOffsetT) *DynamicHeader

func (*DynamicHeader) Init

func (rcv *DynamicHeader) Init(buf []byte, i flatbuffers.UOffsetT)

func (*DynamicHeader) Key

func (rcv *DynamicHeader) Key() []byte

/ alows for binary search lookup / use with CreateVectorOfSortedTables<> instead of the CreateVector

func (*DynamicHeader) Table

func (rcv *DynamicHeader) Table() flatbuffers.Table

func (*DynamicHeader) Value

func (rcv *DynamicHeader) Value() []byte

/ alows for binary search lookup / use with CreateVectorOfSortedTables<> instead of the CreateVector

type Header struct {
	// contains filtered or unexported fields
}

/ \brief: header parsed by rpc engine / must be sizeof()'able / that is, must be a struct in fbs language / / layout / [ 8bits(compression) + 8bits(bitflags) + 16bits(session) + 32bits(size) + 32bits(checksum) + 32bits(meta) ] / total = 128bits == 16bytes /

func NewHeader

func NewHeader(buf []byte) (hdr *Header)

NewHeader - Constructs Header struct from bytes.

func ReceiveHeader

func ReceiveHeader(conn io.Reader) (hdr *Header, err error)

ReceiveHeader - Reads smf RPC header from connection reader.

func ReceivePayload

func ReceivePayload(conn io.Reader) (hdr *Header, req []byte, err error)

ReceivePayload - Reads request header and body.

func (*Header) Bitflags

func (rcv *Header) Bitflags() int8

func (*Header) Checksum

func (rcv *Header) Checksum() uint32

/ currently we use xxhash32

func (*Header) Compression

func (rcv *Header) Compression() int8

func (*Header) Init

func (rcv *Header) Init(buf []byte, i flatbuffers.UOffsetT)

func (*Header) Meta

func (rcv *Header) Meta() uint32

/ \brief used for sending and receiving, read carefully. / / Receiving: / / Uses the same as HTTP status - on the receiving end / We don't want to pay the cost of parsing a header / On every response as does HTTP. std::to_string and std::stol() / are needlesly expensive / / Sending: / / Used with the xor hash of Service::ID() ^ Service::Method::ID() / This is how the server multiplexer figures out what function pointer / to call /

func (*Header) MutateBitflags

func (rcv *Header) MutateBitflags(n int8) bool

func (*Header) MutateChecksum

func (rcv *Header) MutateChecksum(n uint32) bool

/ currently we use xxhash32

func (*Header) MutateCompression

func (rcv *Header) MutateCompression(n int8) bool

func (*Header) MutateMeta

func (rcv *Header) MutateMeta(n uint32) bool

/ \brief used for sending and receiving, read carefully. / / Receiving: / / Uses the same as HTTP status - on the receiving end / We don't want to pay the cost of parsing a header / On every response as does HTTP. std::to_string and std::stol() / are needlesly expensive / / Sending: / / Used with the xor hash of Service::ID() ^ Service::Method::ID() / This is how the server multiplexer figures out what function pointer / to call /

func (*Header) MutateSession

func (rcv *Header) MutateSession(n uint16) bool

/ 16 bits for storing the actual session id. / used for streaming client and slot allocation

func (*Header) MutateSize

func (rcv *Header) MutateSize(n uint32) bool

/ size of the next payload

func (*Header) Session

func (rcv *Header) Session() uint16

/ 16 bits for storing the actual session id. / used for streaming client and slot allocation

func (*Header) Size

func (rcv *Header) Size() uint32

/ size of the next payload

func (*Header) String

func (hdr *Header) String() string

String - Formats header as debug string.

func (*Header) Table

func (rcv *Header) Table() flatbuffers.Table

type PayloadHeaders

type PayloadHeaders struct {
	// contains filtered or unexported fields
}

func GetRootAsPayloadHeaders

func GetRootAsPayloadHeaders(buf []byte, offset flatbuffers.UOffsetT) *PayloadHeaders

func (*PayloadHeaders) Checksum

func (rcv *PayloadHeaders) Checksum() uint32

func (*PayloadHeaders) Compression

func (rcv *PayloadHeaders) Compression() int8

func (*PayloadHeaders) DynamicHeaders

func (rcv *PayloadHeaders) DynamicHeaders(obj *DynamicHeader, j int) bool

/ Headers for forward compat.

func (*PayloadHeaders) DynamicHeadersLength

func (rcv *PayloadHeaders) DynamicHeadersLength() int

func (*PayloadHeaders) Init

func (rcv *PayloadHeaders) Init(buf []byte, i flatbuffers.UOffsetT)

func (*PayloadHeaders) MutateChecksum

func (rcv *PayloadHeaders) MutateChecksum(n uint32) bool

func (*PayloadHeaders) MutateCompression

func (rcv *PayloadHeaders) MutateCompression(n int8) bool

func (*PayloadHeaders) MutateSize

func (rcv *PayloadHeaders) MutateSize(n uint32) bool

/ We need to chain the actual payload

func (*PayloadHeaders) Size

func (rcv *PayloadHeaders) Size() uint32

/ Headers for forward compat. / We need to chain the actual payload

func (*PayloadHeaders) Table

func (rcv *PayloadHeaders) Table() flatbuffers.Table

type RawHandle

type RawHandle func(context.Context, []byte) ([]byte, error)

RawHandle - Raw smf RPC method handle.

type Server

type Server struct {
	// contains filtered or unexported fields
}

Server - SMF RPC server.

func (*Server) HandleConnection

func (server *Server) HandleConnection(conn net.Conn) error

HandleConnection - Handles accepted connection.

func (*Server) ListenAndServe

func (server *Server) ListenAndServe(network, address string) (err error)

ListenAndServe - Starts listening on given address and serves connections.

func (*Server) MethodHandle

func (server *Server) MethodHandle(id uint32) (handle RawHandle)

MethodHandle - Returns method handle for request ID. The handle is nil if the request ID is not recognized.

func (*Server) RegisterService

func (server *Server) RegisterService(service Service)

RegisterService - Registers service on a server.

func (*Server) Serve

func (server *Server) Serve(ln net.Listener) (err error)

Serve - Starts accepting connections on the listener and serving.

type Service

type Service interface {
	// ServiceName - Returns service name.
	ServiceName() string

	// ServiceID - Returns service ID.
	ServiceID() uint32

	// MethodHandle - Returns method handle for request ID.
	// The handle is nil if the request ID is not recognized.
	MethodHandle(id uint32) RawHandle
}

Service - Service interface.

Jump to

Keyboard shortcuts

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