stcp

package
v1.2.6 Latest Latest
Warning

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

Go to latest
Published: Apr 16, 2024 License: MIT Imports: 9 Imported by: 0

README

封装了TCP Server的框架代码

  • 支持Option,如果不传入,则使用缺省的Option
  • 使用方式,使用时需要传入实现好的IConnHandler接口。

IConnHandler接口有两个方法:

  1. ConnCount 获取当前连接数数量,由管理连接的容器负责,或者使用一个原子计数
  2. Do(conn net.Conn) 对当前连接进行处理

func start() {
	var s = NewSTCPSrv(SERVER_ADDRESS, Your_IConnMgr)
	//假设最大连接数为100
	var eh = s.Start(WithMaxConn(100))
	
	... //do other things
	
	select {
	case e := <- eh:
	    ... //handle error 
    }   
}
  • 使用NewTCPSrvX这个函数更简单,只需要实现接口IMsgReader,此接口负责读取数据处理 其中Session的函数 Read表示读取指定的切片大小的数据,如果失败返回error

//实现IMsgReader接口
type Your_IMsgReader {
    ...
}

func (y *Your_IMsgReader) Read(s *Session) error {
	var head [16]byte
	var data [64]byte
	var err = s.Read(head[:])
	if err != nil {
	    return err
	}
	err = s.Read(data[:])
	if err != nil {
	    return errr
	}   
	//now head and data all be read
	...
}

func start() {
	var s = NewSTCPSrvX(SERVER_ADDRESS, Your_IMsgReader)
	//假设最大连接数为100
	var eh = s.Start(YOUR_HANDLER, WithMaxConn(100))
	...
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Echo added in v0.5.3

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

Echo 应答式session

func NewEcho added in v0.5.3

func NewEcho(b *EchoMgr, conn net.Conn) *Echo

NewEcho :

func (*Echo) Close added in v0.5.8

func (s *Echo) Close()

Close : close session just close connection

func (*Echo) Get added in v0.5.3

func (s *Echo) Get() interface{}

Get :

func (*Echo) KeyZaps added in v0.6.2

func (s *Echo) KeyZaps(ext ...zap.Field) []zap.Field

KeyZaps : for uber log

func (*Echo) Logger added in v0.5.3

func (s *Echo) Logger() *ulog.Logger

Logger : get logger

func (*Echo) Read added in v0.5.3

func (s *Echo) Read(bs []byte) error

Read : read specific bytes

func (*Echo) ReleaseRef added in v0.5.8

func (s *Echo) ReleaseRef()

ReleaseRef : when Echo session is disposed, this function should be called to decrease connection counter 减少引用计数

func (*Echo) RemoteAddr added in v0.5.3

func (s *Echo) RemoteAddr() string

RemoteAddr :

func (*Echo) RemoteZap added in v0.6.2

func (s *Echo) RemoteZap() zap.Field

RemoteZap : for uber log

func (*Echo) Send added in v0.5.3

func (s *Echo) Send(bs []byte) error

Send : send bytes, put bytes to queue, not send directly

func (*Echo) Set added in v0.5.3

func (s *Echo) Set(v interface{})

Set :

func (*Echo) SetRemoteAddr added in v0.5.8

func (s *Echo) SetRemoteAddr(addr string)

SetRemoteAddr :

func (*Echo) Start added in v0.5.3

func (s *Echo) Start()

Start :

type EchoMgr added in v0.5.3

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

EchoMgr :

func NewEchoMgr added in v0.5.3

func NewEchoMgr(eh IEcho, opts ...MOption) *EchoMgr

NewEchoMgr :

func (*EchoMgr) ConnCount added in v0.5.3

func (m *EchoMgr) ConnCount() int32

ConnCount 当前连接数

func (*EchoMgr) Do added in v0.5.3

func (m *EchoMgr) Do(conn net.Conn)

Do :

func (*EchoMgr) Logger added in v0.5.3

func (m *EchoMgr) Logger() *ulog.Logger

Logger : get logger

func (*EchoMgr) SetLogger added in v0.5.3

func (m *EchoMgr) SetLogger(logger *ulog.Logger)

SetLogger :

type IConnMgr

type IConnMgr interface {
	//ConnCount 当前连接数
	ConnCount() int32
	//Do handle connection
	Do(conn net.Conn)
	//SetLogger setup logger
	SetLogger(logger *ulog.Logger)
}

IConnMgr interface 连接管理接口

type IEcho added in v0.5.3

type IEcho interface {
	//RunEcho :
	RunEcho(s *Echo)
}

IEcho echo handler

type IKeyZap added in v0.6.2

type IKeyZap interface {
	//KeyZaps : for uber log, key info
	KeyZaps(ext ...zap.Field) []zap.Field
}

IKeyZap : 做调试用的信息

type ISession added in v0.5.0

type ISession interface {
	//Read : read
	Read(s *Session) error
	//OnExit : on exit -- for notify
	OnExit(s *Session)
}

ISession session handler

type ITemporary added in v1.1.8

type ITemporary interface {
	Temporary() bool
}

ITemporary interface to replace net.Error interface to avoid go lint check

type MOption

type MOption func(o *_SessMgrOpt)

MOption session mgr option

func WithReadTimeout

func WithReadTimeout(t time.Duration) MOption

WithReadTimeout : setup read timeout

func WithWriteTimeout

func WithWriteTimeout(t time.Duration) MOption

WithWriteTimeout : setup write timeout

type NetIO added in v0.5.8

type NetIO interface {
	//Set set session related value
	Set(v interface{})
	//Get get session related value
	Get() interface{}
	//SetRemoteAddr :
	SetRemoteAddr(addr string)
	//RemoteAddr :
	RemoteAddr() string
	//Send : send bytes
	Send(bs []byte) error
	//Read : read specific bytes
	Read(bs []byte) error
	//Close : close session
	Close()
	//Logger : get uber logger
	Logger() *ulog.Logger
	//RemoteZap : for uber log
	RemoteZap() zap.Field
	//KeyZaps : for uber log, key info
	KeyZaps(ext ...zap.Field) []zap.Field
}

NetIO : net io

type Option

type Option func(o *_SrvStartOpt)

Option server start option

func WithAccDelay

func WithAccDelay(t time.Duration) Option

WithAccDelay : setup acceptDelay

func WithAccMaxDelay

func WithAccMaxDelay(t time.Duration) Option

WithAccMaxDelay : setup acceptMaxDelay

func WithAccMaxRetry

func WithAccMaxRetry(r int) Option

WithAccMaxRetry : setup acceptMaxRetry

func WithLogger

func WithLogger(l *ulog.Logger) Option

WithLogger : setup logger

func WithMaxConn

func WithMaxConn(r int32) Option

WithMaxConn : setup max conn number

type Server

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

Server : tcp server frame

func NewTCPSrv

func NewTCPSrv(address string, ch IConnMgr) *Server

NewTCPSrv :

func NewTCPSrvX

func NewTCPSrvX(address string, rh ISession, opts ...MOption) *Server

NewTCPSrvX : use a simple IConnMgr

func (*Server) Address

func (s *Server) Address() string

Address :

func (*Server) Close

func (s *Server) Close() error

Close : close server

func (*Server) LoopStart

func (s *Server) LoopStart(opts ...Option) error

LoopStart :

func (*Server) Start

func (s *Server) Start(opts ...Option) <-chan error

Start : loop start server will go loop state Use a channel to receive error

type Session

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

Session session SessionMgr的handler作为缺省的handler rh作为自己独立的handler 优先使用rh,如果rh为空,使用SessionMgr

func NewSession

func NewSession(b *SessionMgr, conn net.Conn) *Session

NewSession :

func (*Session) Close added in v0.5.8

func (s *Session) Close()

Close : close session use close send msg queue to exit loop read/write go routine

func (*Session) Get

func (s *Session) Get() interface{}

Get :

func (*Session) KeyZaps added in v0.6.2

func (s *Session) KeyZaps(ext ...zap.Field) []zap.Field

KeyZaps : for uber log

func (*Session) Logger added in v0.5.6

func (s *Session) Logger() *ulog.Logger

Logger : get logger

func (*Session) Read

func (s *Session) Read(bs []byte) error

Read : read specific bytes

func (*Session) RemoteAddr added in v0.5.2

func (s *Session) RemoteAddr() string

RemoteAddr :

func (*Session) RemoteZap added in v0.6.2

func (s *Session) RemoteZap() zap.Field

RemoteZap : for uber log

func (*Session) Send

func (s *Session) Send(bs []byte) error

Send : send bytes, put bytes to queue, not send directly

func (*Session) Set

func (s *Session) Set(v interface{})

Set :

func (*Session) SetRemoteAddr added in v0.5.2

func (s *Session) SetRemoteAddr(addr string)

SetRemoteAddr :

func (*Session) Start

func (s *Session) Start()

Start :

func (*Session) UpdateHandler added in v0.6.3

func (s *Session) UpdateHandler(rh ISession)

UpdateHandler : update handler

type SessionMgr

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

SessionMgr :

func NewSessionMgr

func NewSessionMgr(rh ISession, opts ...MOption) *SessionMgr

NewSessionMgr :

func (*SessionMgr) ConnCount

func (m *SessionMgr) ConnCount() int32

ConnCount 当前连接数

func (*SessionMgr) Do

func (m *SessionMgr) Do(conn net.Conn)

Do :

func (*SessionMgr) Logger

func (m *SessionMgr) Logger() *ulog.Logger

Logger : get logger

func (*SessionMgr) SetLogger

func (m *SessionMgr) SetLogger(logger *ulog.Logger)

SetLogger :

Jump to

Keyboard shortcuts

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