Documentation
¶
Index ¶
- Constants
- Variables
- func Append(into []byte, lit byte, body ...[]byte) (res []byte)
- func AppendHeader(into []byte, lit byte, bodylen int) (ret []byte)
- func AppendTiny(into []byte, lit byte, body []byte) (res []byte)
- func CloseHeader(buf []byte, bookmark int)
- func Concat(msg ...[]byte) []byte
- func Incomplete(data []byte) int
- func Join(records ...[]byte) (ret []byte)
- func Lit(rec []byte) byte
- func OpenHeader(buf []byte, lit byte) (bookmark int, res []byte)
- func ProbeHeader(data []byte) (lit byte, hdrlen, bodylen int)
- func ProbeHeaders(lits string, data []byte) int
- func Pump(feeder Feeder, drainer Drainer) (err error)
- func PumpN(feeder Feeder, drainer Drainer, n int) (err error)
- func PumpThenClose(feed FeedCloser, drain DrainCloser) error
- func Record(lit byte, body ...[]byte) []byte
- func Relay(feeder Feeder, drainer Drainer) error
- func Take(lit byte, data []byte) (body, rest []byte)
- func TakeAny(data []byte) (lit byte, body, rest []byte)
- func TakeAnyRecord(data []byte) (lit byte, rec, rest []byte)
- func TakeAnyWary(data []byte) (lit byte, body, rest []byte, err error)
- func TakeRecord(lit byte, data []byte) (rec, rest []byte)
- func TakeWary(lit byte, data []byte) (body, rest []byte, err error)
- func TinyRecord(lit byte, body []byte) (tiny []byte)
- func TotalLen(inputs [][]byte) (sum int)
- type ConnType
- type DestroyCallback
- type DrainCloser
- type Drainer
- type FeedCloser
- type FeedDrainCloser
- type Feeder
- type InstallCallback
- type Net
- func (n *Net) Close() error
- func (n *Net) Connect(ctx context.Context, addr string) (err error)
- func (n *Net) ConnectPool(ctx context.Context, name string, addrs []string) (err error)
- func (de *Net) Disconnect(name string) (err error)
- func (n *Net) KeepConnecting(ctx context.Context, name string, addrs []string)
- func (n *Net) KeepListening(ctx context.Context, addr string)
- func (n *Net) Listen(ctx context.Context, addr string) error
- func (de *Net) Unlisten(addr string) error
- type Peer
- type Records
Constants ¶
const ( TYPICAL_MTU = 1500 MAX_OUT_QUEUE_LEN = 1 << 20 // 16MB of pointers is a lot MAX_RETRY_PERIOD = time.Minute MIN_RETRY_PERIOD = time.Second / 2 )
const CaseBit uint8 = 'a' - 'A'
Variables ¶
var ( ErrAddressInvalid = errors.New("the address invalid") ErrAddressDuplicated = errors.New("the address already used") ErrIncomplete = errors.New("incomplete data") ErrBadRecord = errors.New("bad TLV record format") ErrAddressUnknown = errors.New("address unknown") ErrDisconnected = errors.New("disconnected by user") )
Functions ¶
func Append ¶
Append appends a record to the buffer; note that uppercase type is always explicit, lowercase can be defaulted.
func AppendHeader ¶
Feeds the header into the buffer. Subtle: lower-case lit allows for defaulting, uppercase must be explicit.
func CloseHeader ¶
CloseHeader closes a streamed TLV record
func Incomplete ¶
Incomplete returns the number of supposedly yet-unread bytes. 0 for complete, -1 for bad format, >0 for least-necessary read to complete either header or record.
func OpenHeader ¶
OpenHeader opens a streamed TLV record; use append() to create the record body, then call CloseHeader(&buf, bookmark)
func ProbeHeader ¶
ProbeHeader probes a TLV record header. Return values:
- 0 0 0 incomplete header
- '-' 0 0 bad format
- 'A' 2 123 success
func ProbeHeaders ¶
func PumpThenClose ¶
func PumpThenClose(feed FeedCloser, drain DrainCloser) error
func Take ¶
Take is used to read safe TLV inputs (e.g. from own storage) with record types known in advance.
func TakeAnyRecord ¶
func TakeAnyWary ¶
TakeWary reads TLV records of arbitrary type from unsafe input.
func TakeRecord ¶
func TinyRecord ¶
Types ¶
type DestroyCallback ¶
type DestroyCallback func(name string)
type DrainCloser ¶
type FeedCloser ¶
type InstallCallback ¶
type InstallCallback func(name string) FeedDrainCloser
type Net ¶
A TCP/TLS/QUIC server/client for the use case of real-time async communication. Differently from the case of request-response (like HTTP), we do not wait for a request, then dedicating a thread to processing, then sending back the resulting response. Instead, we constantly fan sendQueue tons of tiny messages. That dictates different work patterns than your typical HTTP/RPC server as, for example, we cannot let one slow receiver delay event transmission to all the other receivers.
func NewNet ¶
func NewNet(log utils.Logger, tlsConfig *tls.Config, install InstallCallback, destroy DestroyCallback) *Net
func (*Net) ConnectPool ¶
func (*Net) Disconnect ¶
func (*Net) KeepConnecting ¶
type Records ¶
type Records [][]byte
Records (a batch of) as a very universal primitive, especially for database/network op/packet processing. Batching allows for writev() and other performance optimizations. Also, if you have cryptography, blobs are way handier than structs. Records converts easily to net.Buffers.