gn

package module
v1.5.2 Latest Latest
Warning

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

Go to latest
Published: Mar 28, 2021 License: MIT Imports: 13 Imported by: 2

README

gn

简述

gn是一个基于linux下epoll的网络框架,目前只能运行在Linux下环境,gn可以配置处理网络事件的goroutine数量,相比golang原生库,在海量链接下,可以减少goroutine的开销,从而减少系统资源占用。

支持功能

1.tcp拆包粘包
通过调用系统recv_from函数,使用系统读缓存区实现拆包,减少用户态内存分配,使用sync.pool申请读写使用的字节数组,减少内存申请开销以及GC压力。
2.客户端超时踢出
可以设置超时时间,gn会定时检测超出超时的TCP连接(在指定时间内没有发送数据的连接),进行释放。

使用方式
package main

import (
	"github.com/alberliu/gn"

	"time"
)

var log = gn.GetLogger()

var server *gn.Server

var encoder = gn.NewHeaderLenEncoder(2, 1024)

type Handler struct {
}

func (Handler) OnConnect(c *gn.Conn) {
	log.Info("connect:", c.GetFd(), c.GetAddr())
}
func (Handler) OnMessage(c *gn.Conn, bytes []byte) {
	encoder.EncodeToFD(c.GetFd(), bytes)
	log.Info("read:", string(bytes))
}
func (Handler) OnClose(c *gn.Conn, err error) {
	log.Info("close:", c.GetFd(), err)
}

func main() {
	var err error
	server, err = gn.NewServer(8080, &Handler{}, gn.NewHeaderLenDecoder(2),
		gn.WithTimeout(1*time.Second, 5*time.Second), gn.WithReadBufferLen(10))
	if err != nil {
		log.Info("err")
		return
	}

	server.Run()
}

Documentation

Index

Constants

对端关闭连接 8193

View Source
const (
	EventIn      = 1 // 数据流入
	EventClose   = 2 // 断开连接
	EventTimeout = 3 // 检测到超时
)

Variables

View Source
var (
	ErrReadTimeout = errors.New("tcp read timeout")
)

Functions

func EpollCreate

func EpollCreate(port int) (*epoll, error)

func GetLogger added in v1.5.0

func GetLogger() logger

func NewHeaderLenEncoder added in v1.2.0

func NewHeaderLenEncoder(headerLen, writeBufferLen int) *headerLenEncoder

NewHeaderLenEncoder 创建基于头部长度的编码器 headerLen TCP包的头部内容,用来描述这个包的字节长度 writeBufferLen 服务器发送给客户端包的建议长度,当发送的包小于这个值时,会利用到内存池优化

func SetLogger added in v1.1.0

func SetLogger(l logger)

func TimeEncoder

func TimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder)

Types

type Conn

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

Conn 客户端长连接

func (*Conn) Close

func (c *Conn) Close() error

Close 关闭连接

func (*Conn) GetAddr

func (c *Conn) GetAddr() string

GetAddr 获取客户端地址

func (*Conn) GetData

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

GetData 获取数据

func (*Conn) GetFd

func (c *Conn) GetFd() int32

GetFd 获取文件描述符

func (*Conn) Read

func (c *Conn) Read() error

Read 读取数据

func (*Conn) SetData

func (c *Conn) SetData(data interface{})

SetData 设置数据

func (*Conn) Write

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

Write 写入数据

type Decoder added in v1.2.0

type Decoder interface {
	Decode(c *Conn) error
}

Decoder 解码器

func NewHeaderLenDecoder added in v1.2.0

func NewHeaderLenDecoder(headerLen int) Decoder

NewHeaderLenDecoder 创建基于头部长度的解码器 headerLen TCP包的头部内容,用来描述这个包的字节长度 readMaxLen 所读取的客户端包的最大长度,客户端发送的包不能超过这个长度

type Encoder added in v1.2.0

type Encoder interface {
	EncodeToFD(fd int32, bytes []byte) error
}

Encoder 编码器

type Event added in v1.1.0

type Event struct {
	Fd   int32 // 文件描述符
	Type int32 // 时间类型
}

type Handler

type Handler interface {
	OnConnect(c *Conn)               // OnConnect 当TCP长连接建立成功是回调
	OnMessage(c *Conn, bytes []byte) // OnMessage 当客户端有数据写入是回调
	OnClose(c *Conn, err error)      // OnClose 当客户端主动断开链接或者超时时回调,err返回关闭的原因
}

Handler Server 注册接口

type Option added in v1.1.0

type Option interface {
	// contains filtered or unexported methods
}

func WithAcceptGNum added in v1.1.0

func WithAcceptGNum(num int) Option

WithAcceptGNum 设置建立连接的goroutine数量

func WithIOEventQueueLen added in v1.2.1

func WithIOEventQueueLen(num int) Option

WithIOEventQueueLen 设置IO事件队列长度,默认值是1024

func WithIOGNum added in v1.1.0

func WithIOGNum(num int) Option

WithIOGNum 设置处理IO的goroutine数量

func WithReadBufferLen added in v1.5.0

func WithReadBufferLen(len int) Option

WithReadBufferLen 设置缓存区大小

func WithTimeout added in v1.1.0

func WithTimeout(timeoutTicker, timeout time.Duration) Option

WithTimeout 设置TCP超时检查的间隔时间以及超时时间

type Server

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

server TCP服务

func NewServer

func NewServer(port int, handler Handler, decoder Decoder, opts ...Option) (*Server, error)

NewServer 创建server服务器

func (*Server) GetConn

func (s *Server) GetConn(fd int32) (*Conn, bool)

GetConn 获取Conn

func (*Server) GetConnsNum added in v1.1.0

func (s *Server) GetConnsNum() int64

GetConnsNum 获取当前长连接的数量

func (*Server) Run

func (s *Server) Run()

Run 启动服务

func (*Server) Stop

func (s *Server) Stop()

Run 启动服务

Directories

Path Synopsis
test

Jump to

Keyboard shortcuts

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