Documentation ¶
Index ¶
- Constants
- Variables
- func BuildHeader(session uint16, body []byte, meta uint32) []byte
- func CreateHeader(builder *flatbuffers.Builder, compression int8, bitflags int8, session uint16, ...) flatbuffers.UOffsetT
- func DynamicHeaderAddKey(builder *flatbuffers.Builder, key flatbuffers.UOffsetT)
- func DynamicHeaderAddValue(builder *flatbuffers.Builder, value flatbuffers.UOffsetT)
- func DynamicHeaderEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT
- func DynamicHeaderStart(builder *flatbuffers.Builder)
- func PayloadHeadersAddChecksum(builder *flatbuffers.Builder, checksum uint32)
- func PayloadHeadersAddCompression(builder *flatbuffers.Builder, compression int8)
- func PayloadHeadersAddDynamicHeaders(builder *flatbuffers.Builder, dynamicHeaders flatbuffers.UOffsetT)
- func PayloadHeadersAddSize(builder *flatbuffers.Builder, size uint32)
- func PayloadHeadersEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT
- func PayloadHeadersStart(builder *flatbuffers.Builder)
- func PayloadHeadersStartDynamicHeadersVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT
- func WritePayload(w io.Writer, session uint16, body []byte, meta uint32) (err error)
- type Client
- type DynamicHeader
- type Header
- func (rcv *Header) Bitflags() int8
- func (rcv *Header) Checksum() uint32
- func (rcv *Header) Compression() int8
- func (rcv *Header) Init(buf []byte, i flatbuffers.UOffsetT)
- func (rcv *Header) Meta() uint32
- func (rcv *Header) MutateBitflags(n int8) bool
- func (rcv *Header) MutateChecksum(n uint32) bool
- func (rcv *Header) MutateCompression(n int8) bool
- func (rcv *Header) MutateMeta(n uint32) bool
- func (rcv *Header) MutateSession(n uint16) bool
- func (rcv *Header) MutateSize(n uint32) bool
- func (rcv *Header) Session() uint16
- func (rcv *Header) Size() uint32
- func (hdr *Header) String() string
- func (rcv *Header) Table() flatbuffers.Table
- type PayloadHeaders
- func (rcv *PayloadHeaders) Checksum() uint32
- func (rcv *PayloadHeaders) Compression() int8
- func (rcv *PayloadHeaders) DynamicHeaders(obj *DynamicHeader, j int) bool
- func (rcv *PayloadHeaders) DynamicHeadersLength() int
- func (rcv *PayloadHeaders) Init(buf []byte, i flatbuffers.UOffsetT)
- func (rcv *PayloadHeaders) MutateChecksum(n uint32) bool
- func (rcv *PayloadHeaders) MutateCompression(n int8) bool
- func (rcv *PayloadHeaders) MutateSize(n uint32) bool
- func (rcv *PayloadHeaders) Size() uint32
- func (rcv *PayloadHeaders) Table() flatbuffers.Table
- type RawHandle
- type Server
- func (server *Server) HandleConnection(conn net.Conn) error
- func (server *Server) ListenAndServe(network, address string) (err error)
- func (server *Server) MethodHandle(id uint32) (handle RawHandle)
- func (server *Server) RegisterService(service Service)
- func (server *Server) Serve(ln net.Listener) (err error)
- type Service
Constants ¶
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. /
const (
HeaderBitFlagsHasPayloadHeaders = 1
)
Variables ¶
var EnumNamesCompressionFlags = map[int]string{ CompressionFlagsNone: "None", CompressionFlagsDisabled: "Disabled", CompressionFlagsZstd: "Zstd", CompressionFlagsLz4: "Lz4", }
var EnumNamesHeaderBitFlags = map[int]string{ HeaderBitFlagsHasPayloadHeaders: "HasPayloadHeaders", }
Functions ¶
func BuildHeader ¶
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
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client - SMF Client connection.
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 ¶
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 ReceiveHeader ¶
ReceiveHeader - Reads smf RPC header from connection reader.
func ReceivePayload ¶
ReceivePayload - Reads request header and body.
func (*Header) Compression ¶
func (*Header) Meta ¶
/ \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 (*Header) MutateChecksum ¶
/ currently we use xxhash32
func (*Header) MutateCompression ¶
func (*Header) MutateMeta ¶
/ \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 ¶
/ 16 bits for storing the actual session id. / used for streaming client and slot allocation
func (*Header) Session ¶
/ 16 bits for storing the actual session id. / used for streaming client and slot allocation
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 Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server - SMF RPC server.
func (*Server) HandleConnection ¶
HandleConnection - Handles accepted connection.
func (*Server) ListenAndServe ¶
ListenAndServe - Starts listening on given address and serves connections.
func (*Server) MethodHandle ¶
MethodHandle - Returns method handle for request ID. The handle is nil if the request ID is not recognized.
func (*Server) RegisterService ¶
RegisterService - Registers service on a server.
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.