Documentation ¶
Index ¶
- Variables
- func Serve(eventHandler EventHandler, protoAddr string, opts ...Option) (err error)
- func Stop(ctx context.Context, protoAddr string) error
- type Action
- type BuiltInFrameCodec
- type Conn
- type DecoderConfig
- type DelimiterBasedFrameCodec
- type EncoderConfig
- type EventHandler
- type EventServer
- func (es *EventServer) OnClosed(c Conn, err error) (action Action)
- func (es *EventServer) OnInitComplete(svr Server) (action Action)
- func (es *EventServer) OnOpened(c Conn) (out []byte, action Action)
- func (es *EventServer) OnShutdown(svr Server)
- func (es *EventServer) PreWrite()
- func (es *EventServer) React(frame interface{}, c Conn) (out interface{}, action Action)
- func (es *EventServer) Tick() (delay time.Duration, action Action)
- type FixedLengthFrameCodec
- type ICodec
- type LengthFieldBasedFrameCodec
- type LineBasedFrameCodec
- type LoadBalancing
- type NICodec
- type Option
- func WithBytePool(pool *sync.Pool) Option
- func WithCodec(codec ICodec) Option
- func WithLoadBalancing(lb LoadBalancing) Option
- func WithLockOSThread(lockOSThread bool) Option
- func WithLogger(logger logging.Logger) Option
- func WithMulticore(multicore bool) Option
- func WithNCodec(codec NICodec) Option
- func WithNumEventLoop(numEventLoop int) Option
- func WithObjPool(pool *sync.Pool) Option
- func WithOptions(options Options) Option
- func WithReusePort(reusePort bool) Option
- func WithTCPKeepAlive(tcpKeepAlive time.Duration) Option
- func WithTicker(ticker bool) Option
- type Options
- type Server
Constants ¶
This section is empty.
Variables ¶
var CRLFByte = byte('\n')
CRLFByte represents a byte of CRLF.
Functions ¶
func Serve ¶
func Serve(eventHandler EventHandler, protoAddr string, opts ...Option) (err error)
Serve starts handling events for the specified address.
Address should use a scheme prefix and be formatted like `tcp://192.168.0.10:9851` or `unix://socket`. Valid network schemes:
tcp - bind to both IPv4 and IPv6 tcp4 - IPv4 tcp6 - IPv6 udp - bind to both IPv4 and IPv6 udp4 - IPv4 udp6 - IPv6 unix - Unix Domain Socket
The "tcp" network scheme is assumed when one is not specified.
Types ¶
type BuiltInFrameCodec ¶
type BuiltInFrameCodec struct { }
BuiltInFrameCodec is the built-in codec which will be assigned to gnet server when customized codec is not set up.
type Conn ¶
type Conn interface { // Context returns a user-defined context. Context() (ctx interface{}) // SetContext sets a user-defined context. SetContext(ctx interface{}) // LocalAddr is the connection's local socket address. LocalAddr() (addr net.Addr) // RemoteAddr is the connection's remote peer address. RemoteAddr() (addr net.Addr) // Read reads all data from inbound ring-buffer and event-loop-buffer without moving "read" pointer, which means // it does not evict the data from buffers actually and those data will present in buffers until the // ResetBuffer method is called. Read() (buf []byte) // ResetBuffer resets the buffers, which means all data in inbound ring-buffer and event-loop-buffer will be evicted. ResetBuffer() // ReadN reads bytes with the given length from inbound ring-buffer and event-loop-buffer without moving // "read" pointer, which means it will not evict the data from buffers until the ShiftN method is called, // it reads data from the inbound ring-buffer and event-loop-buffer and returns both bytes and the size of it. // If the length of the available data is less than the given "n", ReadN will return all available data, so you // should make use of the variable "size" returned by it to be aware of the exact length of the returned data. ReadN(n int) (size int, buf []byte) // ShiftN shifts "read" pointer in the internal buffers with the given length. ShiftN(n int) (size int) // BufferLength returns the length of available data in the internal buffers. BufferLength() (size int) // SendTo writes data for UDP sockets, it allows you to send data back to UDP socket in individual goroutines. SendTo(buf []byte) error // AsyncWrite writes data to client/connection asynchronously, usually you would call it in individual goroutines // instead of the event-loop goroutines. AsyncWrite(dataFrame interface{}) error // Wake triggers a React event for this connection. Wake() error // Close closes the current connection. Close() error }
Conn is a interface of gnet connection.
type DecoderConfig ¶
type DecoderConfig struct { // ByteOrder is the ByteOrder of the length field. ByteOrder binary.ByteOrder // LengthFieldOffset is the offset of the length field LengthFieldOffset int // LengthFieldLength is the length of the length field LengthFieldLength int // LengthAdjustment is the compensation value to add to the value of the length field LengthAdjustment int // InitialBytesToStrip is the number of first bytes to strip out from the decoded frame InitialBytesToStrip int }
DecoderConfig config for decoder.
type DelimiterBasedFrameCodec ¶
type DelimiterBasedFrameCodec struct {
// contains filtered or unexported fields
}
DelimiterBasedFrameCodec encodes/decodes specific-delimiter-separated frames into/from TCP stream.
func NewDelimiterBasedFrameCodec ¶
func NewDelimiterBasedFrameCodec(delimiter byte) *DelimiterBasedFrameCodec
NewDelimiterBasedFrameCodec instantiates and returns a codec with a specific delimiter.
type EncoderConfig ¶
type EncoderConfig struct { // ByteOrder is the ByteOrder of the length field. ByteOrder binary.ByteOrder // LengthFieldLength is the length of the length field. LengthFieldLength int // LengthAdjustment is the compensation value to add to the value of the length field LengthAdjustment int // LengthIncludesLengthFieldLength is true, the length of the prepended length field is added to the value of // the prepended length field LengthIncludesLengthFieldLength bool }
EncoderConfig config for encoder.
type EventHandler ¶
type EventHandler interface { // OnInitComplete fires when the server is ready for accepting connections. // The parameter:server has information and various utilities. OnInitComplete(server Server) (action Action) // OnShutdown fires when the server is being shut down, it is called right after // all event-loops and connections are closed. OnShutdown(server Server) // OnOpened fires when a new connection has been opened. // The parameter:c has information about the connection such as it's local and remote address. // Parameter:out is the return value which is going to be sent back to the client. OnOpened(c Conn) (out []byte, action Action) // OnClosed fires when a connection has been closed. // The parameter:err is the last known connection error. OnClosed(c Conn, err error) (action Action) // PreWrite fires just before any data is written to any client socket, this event function is usually used to // put some code of logging/counting/reporting or any prepositive operations before writing data to client. PreWrite() // React fires when a connection sends the server data. // Call c.Read() or c.ReadN(n) within the parameter:c to read incoming data from client. // Parameter:out is the return value which is going to be sent back to the client. React(frame interface{}, c Conn) (out interface{}, action Action) // Tick fires immediately after the server starts and will fire again // following the duration specified by the delay return value. Tick() (delay time.Duration, action Action) }
EventHandler represents the server events' callbacks for the Serve call. Each event has an Action return value that is used manage the state of the connection and server.
type EventServer ¶
type EventServer struct { }
EventServer is a built-in implementation of EventHandler which sets up each method with a default implementation, you can compose it with your own implementation of EventHandler when you don't want to implement all methods in EventHandler.
func (*EventServer) OnClosed ¶
func (es *EventServer) OnClosed(c Conn, err error) (action Action)
OnClosed fires when a connection has been closed. The parameter:err is the last known connection error.
func (*EventServer) OnInitComplete ¶
func (es *EventServer) OnInitComplete(svr Server) (action Action)
OnInitComplete fires when the server is ready for accepting connections. The parameter:server has information and various utilities.
func (*EventServer) OnOpened ¶
func (es *EventServer) OnOpened(c Conn) (out []byte, action Action)
OnOpened fires when a new connection has been opened. The parameter:c has information about the connection such as it's local and remote address. Parameter:out is the return value which is going to be sent back to the client.
func (*EventServer) OnShutdown ¶
func (es *EventServer) OnShutdown(svr Server)
OnShutdown fires when the server is being shut down, it is called right after all event-loops and connections are closed.
func (*EventServer) PreWrite ¶
func (es *EventServer) PreWrite()
PreWrite fires just before any data is written to any client socket, this event function is usually used to put some code of logging/counting/reporting or any prepositive operations before writing data to client.
func (*EventServer) React ¶
func (es *EventServer) React(frame interface{}, c Conn) (out interface{}, action Action)
React fires when a connection sends the server data. Call c.Read() or c.ReadN(n) within the parameter:c to read incoming data from client. Parameter:out is the return value which is going to be sent back to the client.
type FixedLengthFrameCodec ¶
type FixedLengthFrameCodec struct {
// contains filtered or unexported fields
}
FixedLengthFrameCodec encodes/decodes fixed-length-separated frames into/from TCP stream.
func NewFixedLengthFrameCodec ¶
func NewFixedLengthFrameCodec(frameLength int) *FixedLengthFrameCodec
NewFixedLengthFrameCodec instantiates and returns a codec with fixed length.
type ICodec ¶
type ICodec interface { // Encode encodes frames upon server responses into TCP stream. Encode(c Conn, buf []byte) ([]byte, error) // Decode decodes frames from TCP stream via specific implementation. Decode(c Conn) ([]byte, error) }
ICodec is the interface of gnet codec.
type LengthFieldBasedFrameCodec ¶
type LengthFieldBasedFrameCodec struct {
// contains filtered or unexported fields
}
LengthFieldBasedFrameCodec is the refactoring from https://github.com/smallnest/goframe/blob/master/length_field_based_frameconn.go, licensed by Apache License 2.0. It encodes/decodes frames into/from TCP stream with value of the length field in the message.
func NewLengthFieldBasedFrameCodec ¶
func NewLengthFieldBasedFrameCodec(ec EncoderConfig, dc DecoderConfig) *LengthFieldBasedFrameCodec
NewLengthFieldBasedFrameCodec instantiates and returns a codec based on the length field. It is the go implementation of netty LengthFieldBasedFrameecoder and LengthFieldPrepender. you can see javadoc of them to learn more details.
type LineBasedFrameCodec ¶
type LineBasedFrameCodec struct { }
LineBasedFrameCodec encodes/decodes line-separated frames into/from TCP stream.
type LoadBalancing ¶
type LoadBalancing int
LoadBalancing represents the the type of load-balancing algorithm.
const ( // RoundRobin assigns the next accepted connection to the event-loop by polling event-loop list. RoundRobin LoadBalancing = iota // LeastConnections assigns the next accepted connection to the event-loop that is // serving the least number of active connections at the current time. LeastConnections // SourceAddrHash assignes the next accepted connection to the event-loop by hashing the remote address. SourceAddrHash )
type Option ¶
type Option func(opts *Options)
Option is a function that will set up option.
func WithBytePool ¶
WithBytePool sets up a sync pool to encode.
func WithLoadBalancing ¶
func WithLoadBalancing(lb LoadBalancing) Option
WithLoadBalancing sets up the load-balancing algorithm in gnet server.
func WithLockOSThread ¶
WithLockOSThread sets up lockOSThread mode for I/O event-loops.
func WithLogger ¶
WithLogger sets up a customized logger.
func WithMulticore ¶
WithMulticore sets up multi-cores in gnet server.
func WithNCodec ¶
WithCodec sets up a codec to handle TCP stream.
func WithNumEventLoop ¶
WithNumEventLoop sets up NumEventLoop in gnet server.
func WithObjPool ¶
WithObjPool sets up a sync pool to handle TCP stream.
func WithReusePort ¶
WithReusePort sets up SO_REUSEPORT socket option.
func WithTCPKeepAlive ¶
WithTCPKeepAlive sets up SO_KEEPALIVE socket option.
type Options ¶
type Options struct { // Multicore indicates whether the server will be effectively created with multi-cores, if so, // then you must take care with synchronizing memory between all event callbacks, otherwise, // it will run the server with single thread. The number of threads in the server will be automatically // assigned to the value of logical CPUs usable by the current process. Multicore bool // LockOSThread is used to determine whether each I/O event-loop is associated to an OS thread, it is useful when you // need some kind of mechanisms like thread local storage, or invoke certain C libraries (such as graphics lib: GLib) // that require thread-level manipulation via cgo, or want all I/O event-loops to actually run in parallel for a // potential higher performance. LockOSThread bool // LB represents the load-balancing algorithm used when assigning new connections. LB LoadBalancing // NumEventLoop is set up to start the given number of event-loop goroutine. // Note: Setting up NumEventLoop will override Multicore. NumEventLoop int // ReusePort indicates whether to set up the SO_REUSEPORT socket option. ReusePort bool // Ticker indicates whether the ticker has been set up. Ticker bool // TCPKeepAlive sets up a duration for (SO_KEEPALIVE) socket option. TCPKeepAlive time.Duration // ICodec encodes and decodes TCP stream. Codec ICodec // NCodec NICodec // ObjPool *sync.Pool // byte pool BytePool *sync.Pool // Logger is the customized logger for logging info, if it is not set, // then gnet will use the default logger powered by go.uber.org/zap. Logger logging.Logger }
Options are set when the client opens.
type Server ¶
type Server struct { // Multicore indicates whether the server will be effectively created with multi-cores, if so, // then you must take care of synchronizing the shared data between all event callbacks, otherwise, // it will run the server with single thread. The number of threads in the server will be automatically // assigned to the value of logical CPUs usable by the current process. Multicore bool // The Addr parameter is the listening address that align // with the addr string passed to the Serve function. Addr net.Addr // NumEventLoop is the number of event-loops that the server is using. NumEventLoop int // ReusePort indicates whether SO_REUSEPORT is enable. ReusePort bool // TCPKeepAlive (SO_KEEPALIVE) socket option. TCPKeepAlive time.Duration // contains filtered or unexported fields }
Server represents a server context which provides information about the running server and has control functions for managing state.
func (Server) CountConnections ¶
CountConnections counts the number of currently active connections and returns it.