easyNet

package module
v0.0.4 Latest Latest
Warning

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

Go to latest
Published: Feb 22, 2022 License: MIT Imports: 15 Imported by: 0

README

easyNet - NON BLOCKING IO

GoDoc MIT licensed Build Status Go Report Card Coverage Statusd

Examples

package main

import (
	"fmt"
	"github.com/wubbalubbaaa/easyNet"
	"time"
)

func onOpen(c *easyNet.Conn) {
	c.SetReadDeadline(time.Now().Add(time.Second * 13))
	fmt.Println("onOpen:", c.RemoteAddr().String(), time.Now().Format("15:04:05.000"))
}

func onClose(c *easyNet.Conn) {
	fmt.Println("onClose:", c.RemoteAddr().String(), time.Now().Format("15:04:05.000"))
}

func onData(c *easyNet.Conn, data []byte) {
	c.SetReadDeadline(time.Now().Add(time.Second * 10))
	c.SetWriteDeadline(time.Now().Add(time.Second * 3))
	c.Write(append([]byte{}, data...))
}

func main() {
	g, err := easyNet.NewGopher(easyNet.Config{
		Network:      "tcp",
		Address:      ":8888",
		NPoller:      4,
		NWorker:      8,
		QueueSize:    1024,
		BufferSize:   1024 * 64,
		BufferNum:    1024 * 2,
		PollInterval: 200,       //ms
		MaxTimeout:   10 * 1000, //ms
	})
	if err != nil {
		fmt.Printf("easyNet.New failed: %v\n", err)
		return
	}

	g.OnOpen(onOpen)
	g.OnClose(onClose)
	g.OnData(onData)

	err = g.Start()
	if err != nil {
		fmt.Printf("easyNet.Start failed: %v\n", err)
		return
	}

	go func() {
		for {
			time.Sleep(time.Second * 5)
			fmt.Println(g.State().String())
		}
	}()

	g.Wait()
}

Documentation

Index

Constants

View Source
const (
	// DefaultReadBufferSize .
	DefaultReadBufferSize = 1024 * 32

	// DefaultMaxWriteBufferSize .
	DefaultMaxWriteBufferSize = 1024 * 1024

	// DefaultMaxReadTimesPerEventLoop .
	DefaultMaxReadTimesPerEventLoop = 3

	// DefaultMinConnCacheSize .
	DefaultMinConnCacheSize = 1024 * 2
)
View Source
const (
	// EPOLLLT .
	EPOLLLT = 0

	// EPOLLET .
	EPOLLET = 0x80000000
)

Variables

View Source
var CRLFByte = byte('\n')

CRLFByte represents a byte of CRLF.

View Source
var (
	// MaxOpenFiles .
	MaxOpenFiles = 1024 * 1024
)

Functions

This section is empty.

Types

type BuiltInFrameCodec added in v0.0.4

type BuiltInFrameCodec struct {
}

BuiltInFrameCodec is the built-in codec which will be assigned to gnet server when customized codec is not set up.

type Config

type Config struct {
	// Name describes your gopher name for logging, it's set to "NB" by default.
	Name string

	// Network is the listening protocol, used with Addrs toghter.
	// tcp* supported only by now, there's no plan for other protocol such as udp,
	// because it's too easy to write udp server/client.
	Network string

	// Addrs is the listening addr list for a easyNet server.
	// if it is empty, no listener created, then the Gopher is used for client by default.
	Addrs []string

	// NPoller represents poller goroutine num, it's set to runtime.NumCPU() by default.
	NPoller int

	// NListener represents poller goroutine num, it's set to runtime.NumCPU() by default.
	NListener int

	// Backlog represents backlog arg for syscall.Listen
	Backlog int

	// ReadBufferSize represents buffer size for reading, it's set to 16k by default.
	ReadBufferSize int

	// MinConnCacheSize represents application layer's Conn write cache buffer size when the kernel sendQ is full
	MinConnCacheSize int

	// MaxWriteBufferSize represents max write buffer size for Conn, it's set to 1m by default.
	// if the connection's Send-Q is full and the data cached by easyNet is
	// more than MaxWriteBufferSize, the connection would be closed by easyNet.
	MaxWriteBufferSize int

	// MaxReadTimesPerEventLoop represents max read times in one poller loop for one fd
	MaxReadTimesPerEventLoop int

	// LockListener represents listener's goroutine to lock thread or not, it's set to false by default.
	LockListener bool

	// LockPoller represents poller's goroutine to lock thread or not, it's set to false by default.
	LockPoller bool

	// EpollMod sets the epoll mod, EPOLLLT by default.
	EpollMod int
}

Config Of Gopher.

type Conn

type Conn struct {
	ReadBuffer []byte

	CacheBuffer []byte

	DataHandler func(c *Conn, data []byte)
	// contains filtered or unexported fields
}

Conn implements net.Conn.

func Dial

func Dial(network string, address string) (*Conn, error)

Dial wraps net.Dial.

func DialTimeout added in v0.0.3

func DialTimeout(network string, address string, timeout time.Duration) (*Conn, error)

DialTimeout wraps net.DialTimeout.

func NBConn added in v0.0.3

func NBConn(conn net.Conn) (*Conn, error)

NBConn converts net.Conn to *Conn.

func (*Conn) Cache added in v0.0.4

func (c *Conn) Cache() *[]byte

func (*Conn) Close

func (c *Conn) Close() error

Close implements Close.

func (*Conn) CloseWithError added in v0.0.3

func (c *Conn) CloseWithError(err error) error

CloseWithError .

func (*Conn) Execute added in v0.0.3

func (c *Conn) Execute(f func())

Execute .

func (*Conn) ExecuteLen added in v0.0.3

func (c *Conn) ExecuteLen() int

ExecuteLen .

func (*Conn) Hash

func (c *Conn) Hash() int

Hash returns a hash code.

func (*Conn) IsClosed added in v0.0.3

func (c *Conn) IsClosed() (bool, error)

IsClosed .

func (*Conn) LocalAddr

func (c *Conn) LocalAddr() net.Addr

LocalAddr implements LocalAddr.

func (*Conn) Lock added in v0.0.3

func (c *Conn) Lock()

Lock .

func (*Conn) MustExecute added in v0.0.3

func (c *Conn) MustExecute(f func())

MustExecute .

func (*Conn) OnData added in v0.0.3

func (c *Conn) OnData(h func(conn *Conn, data []byte))

OnData registers callback for data.

func (*Conn) Read

func (c *Conn) Read(b []byte) (int, error)

Read implements Read.

func (*Conn) RemoteAddr

func (c *Conn) RemoteAddr() net.Addr

RemoteAddr implements RemoteAddr.

func (*Conn) Session

func (c *Conn) Session() interface{}

Session returns user session.

func (*Conn) SetCodec added in v0.0.4

func (c *Conn) SetCodec(codec ICodec)

func (*Conn) SetDeadline

func (c *Conn) SetDeadline(t time.Time) error

SetDeadline implements SetDeadline.

func (*Conn) SetKeepAlive

func (c *Conn) SetKeepAlive(keepalive bool) error

SetKeepAlive implements SetKeepAlive.

func (*Conn) SetKeepAlivePeriod

func (c *Conn) SetKeepAlivePeriod(d time.Duration) error

SetKeepAlivePeriod implements SetKeepAlivePeriod.

func (*Conn) SetLinger

func (c *Conn) SetLinger(onoff int32, linger int32) error

SetLinger implements SetLinger.

func (*Conn) SetNoDelay

func (c *Conn) SetNoDelay(nodelay bool) error

SetNoDelay implements SetNoDelay.

func (*Conn) SetReadBuffer

func (c *Conn) SetReadBuffer(bytes int) error

SetReadBuffer implements SetReadBuffer.

func (*Conn) SetReadDeadline

func (c *Conn) SetReadDeadline(t time.Time) error

SetReadDeadline implements SetReadDeadline.

func (*Conn) SetSession

func (c *Conn) SetSession(session interface{})

SetSession sets user session.

func (*Conn) SetWriteBuffer

func (c *Conn) SetWriteBuffer(bytes int) error

SetWriteBuffer implements SetWriteBuffer.

func (*Conn) SetWriteDeadline

func (c *Conn) SetWriteDeadline(t time.Time) error

SetWriteDeadline implements SetWriteDeadline.

func (*Conn) Unlock added in v0.0.3

func (c *Conn) Unlock()

Unlock .

func (*Conn) Write

func (c *Conn) Write(b []byte) (int, error)

Write implements Write.

func (*Conn) Writev

func (c *Conn) Writev(in [][]byte) (int, error)

Writev implements Writev.

type DecoderConfig added in v0.0.4

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 added in v0.0.4

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

DelimiterBasedFrameCodec encodes/decodes specific-delimiter-separated frames into/from TCP stream.

type EncoderConfig added in v0.0.4

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
}

type FixedLengthFrameCodec added in v0.0.4

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

FixedLengthFrameCodec encodes/decodes fixed-length-separated frames into/from TCP stream.

func NewFixedLengthFrameCodec added in v0.0.4

func NewFixedLengthFrameCodec(frameLength int) *FixedLengthFrameCodec

NewFixedLengthFrameCodec instantiates and returns a codec with fixed length.

func (*FixedLengthFrameCodec) Decode added in v0.0.4

func (cc *FixedLengthFrameCodec) Decode(c *Conn) (data []byte, err error)

Decode ...

func (*FixedLengthFrameCodec) Encode added in v0.0.4

func (cc *FixedLengthFrameCodec) Encode(c *Conn, buf []byte) ([]byte, error)

Encode ...

type Gopher

type Gopher struct {
	sync.WaitGroup

	Name string

	Execute func(f func())
	// contains filtered or unexported fields
}

Gopher is a manager of poller.

func NewGopher

func NewGopher(conf Config) *Gopher

NewGopher is a factory impl.

func (*Gopher) AddConn

func (g *Gopher) AddConn(conn net.Conn) (*Conn, error)

AddConn adds conn to a poller.

func (*Gopher) After

func (g *Gopher) After(timeout time.Duration) <-chan time.Time

After used as time.After.

func (*Gopher) AfterFunc

func (g *Gopher) AfterFunc(timeout time.Duration, f func()) *Timer

AfterFunc used as time.AfterFunc.

func (*Gopher) AfterRead

func (g *Gopher) AfterRead(h func(c *Conn))

AfterRead registers callback after syscall.Read the handler would be called only on *nix.

func (*Gopher) BeforeRead

func (g *Gopher) BeforeRead(h func(c *Conn))

BeforeRead registers callback before syscall.Read the handler would be called only on windows.

func (*Gopher) BeforeWrite

func (g *Gopher) BeforeWrite(h func(c *Conn))

BeforeWrite registers callback befor syscall.Write and syscall.Writev

func (*Gopher) OnClose

func (g *Gopher) OnClose(h func(c *Conn, err error))

OnClose registers callback for disconnected.

func (*Gopher) OnData

func (g *Gopher) OnData(h func(c *Conn, data []byte))

OnData registers callback for data.

func (*Gopher) OnOpen

func (g *Gopher) OnOpen(h func(c *Conn))

OnOpen registers callback for new connection.

func (*Gopher) OnRead

func (g *Gopher) OnRead(h func(c *Conn))

OnRead registers callback for reading event.

func (*Gopher) OnReadBufferAlloc added in v0.0.3

func (g *Gopher) OnReadBufferAlloc(h func(c *Conn) []byte)

OnReadBufferAlloc registers callback for memory allocating.

func (*Gopher) OnReadBufferFree added in v0.0.3

func (g *Gopher) OnReadBufferFree(h func(c *Conn, b []byte))

OnReadBufferFree registers callback for memory release.

func (*Gopher) OnStop added in v0.0.3

func (g *Gopher) OnStop(h func())

OnStop registers callback before Gopher is stopped.

func (*Gopher) OnWriteBufferRelease added in v0.0.3

func (g *Gopher) OnWriteBufferRelease(h func(c *Conn, b []byte))

OnWriteBufferRelease registers callback for write buffer memory release.

func (*Gopher) PollerBuffer

func (g *Gopher) PollerBuffer(c *Conn) []byte

PollerBuffer returns Poller's buffer by Conn, can be used on linux/bsd.

func (*Gopher) Start

func (g *Gopher) Start() error

Start init and start pollers.

func (*Gopher) Stop

func (g *Gopher) Stop()

Stop pollers.

type ICodec added in v0.0.4

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)
}

type LengthFieldBasedFrameCodec added in v0.0.4

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 added in v0.0.4

func NewLengthFieldBasedFrameCodec(ec EncoderConfig, dc DecoderConfig) *LengthFieldBasedFrameCodec

func (*LengthFieldBasedFrameCodec) Decode added in v0.0.4

func (cc *LengthFieldBasedFrameCodec) Decode(c *Conn) (out []byte, err error)

func (*LengthFieldBasedFrameCodec) Encode added in v0.0.4

func (cc *LengthFieldBasedFrameCodec) Encode(c *Conn, buf []byte) (out []byte, err error)

type LineBasedFrameCodec added in v0.0.4

type LineBasedFrameCodec struct {
}

LineBasedFrameCodec encodes/decodes line-separated frames into/from TCP stream.

type Timer

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

Timer type for export.

func (Timer) Reset

func (it Timer) Reset(timeout time.Duration)

reset timer.

func (Timer) Stop

func (it Timer) Stop()

cancel timer.

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

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