protocol

package module
v0.2.2 Latest Latest
Warning

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

Go to latest
Published: Mar 11, 2024 License: GPL-2.0 Imports: 9 Imported by: 0

README

Protocol

一个简易的数据传输协议,保证在流传输协议下,每次Write的数据对方能完整(不多&不少)的接收和处理

GoReport Gitea Release Go.Dev reference

import "git.viry.cc/gomod/protocol"

样例请参照protocol_test.go中的示例,示例中包含了对tcp的封装

// 创建protocol封装
New(tag string, r io.Reader, w io.Writer, writeQueueSize int, readCallback func(data []byte), heartbeatTimeoutCallback func(p *Protocol) bool, setFuncBeforeRead, setFuncBeforeWrite, killCallback func()) *Protocol
// 启动传输,通过参数确定是否是心跳服务端(主动发出心跳信号一方)
//    如果传输双方均为发出方,不会影响正常服务,但会产生不必要的心跳
Connect(bool)
// 发送数据(注意数据长度有限制
Write([]byte{0x11, 0x22, 0x33})
// 设置心跳请求间隔(单位秒),用于主动发出心跳的一方
SetHeartbeatInterval(interval uint8)
GetHeartbeatInterval() uint8
// 设置心跳超时时间(单位秒)
SetHeartbeatTimeout(timeout uint8)
GetHeartbeatTimeout() uint8
// 获取上一次收到心跳的时间
GetHeartbeatLastReceived()
// 获取上一次发送心跳的时间
GetHeartbeatLastSend()
// 获取正在运行的协程的数量
GetRunningRoutine() int32
// 等待Protocol关闭
WaitKilled(timeout int) error
// 获取tag
GetTag() string
SetTag(tag string)
// 关闭Protocol
Kill()

// 设置log模式
SetLogProd(isProd bool)
SetLogMask(mask uint32)
SetLogFlag(f uint32)

// Protocol版本号,不同版本存在不兼容的可能性
protocol.VERSION
// 获取每次Write的最大数据长度
protocol.GetDataMaxSize() int
// 计算传入的size需要多少次Write才能发送
protocol.CalculateTheNumberOfPackages(size int64) int64

Documentation

Index

Constants

View Source
const (
	MaskUNKNOWN = glog.MaskUNKNOWN
	MaskDEBUG   = glog.MaskDEBUG
	MaskTRACE   = glog.MaskTRACE
	MaskINFO    = glog.MaskINFO
	MaskWARNING = glog.MaskWARNING
	MaskERROR   = glog.MaskERROR
	MaskFATAL   = glog.MaskFATAL

	MaskStd = glog.MaskStd
	MaskAll = glog.MaskAll

	MaskDev  = MaskFATAL | MaskERROR | MaskWARNING | MaskINFO | MaskTRACE | MaskDEBUG | MaskUNKNOWN
	MaskProd = MaskFATAL | MaskERROR | MaskWARNING
)
View Source
const (
	FlagDate      = glog.FlagDate
	FlagTime      = glog.FlagTime
	FlagLongFile  = glog.FlagLongFile
	FlagShortFile = glog.FlagShortFile
	FlagFunc      = glog.FlagFunc
	FlagPrefix    = glog.FlagPrefix
	FlagSuffix    = glog.FlagSuffix

	FlagStd = glog.FlagStd
	FlagAll = glog.FlagAll

	FlagDev  = FlagDate | FlagTime | FlagShortFile | FlagFunc | FlagPrefix | FlagSuffix
	FlagProd = FlagDate | FlagTime | FlagPrefix
)
View Source
const VERSION uint8 = 1

Variables

View Source
var ErrorDataSizeExceedsLimit = errors.New("data size exceeds limit")
View Source
var ErrorHeartbeatCallbackIsNil = errors.New("heartbeat callback is nil")
View Source
var ErrorHeartbeatIsKilled = errors.New("heartbeat is killed")
View Source
var ErrorPackageIncomplete = errors.New("package incomplete")
View Source
var ErrorReadCallbackIsNil = errors.New("read callback is nil")
View Source
var ErrorReaderIsKilled = errors.New("reader is killed")
View Source
var ErrorReaderIsNil = errors.New("reader is nil")
View Source
var ErrorTimeout = errors.New("timeout")
View Source
var ErrorWriterIsKilled = errors.New("writer is killed")
View Source
var ErrorWriterIsNil = errors.New("writer is nil")
View Source
var ErrorWriterQueueIsNil = errors.New("writer queue is nil")

Functions

func CalculateTheNumberOfPackages

func CalculateTheNumberOfPackages(size int64) int64

func GetDataMaxSize

func GetDataMaxSize() int

func SetLogFlag added in v0.0.6

func SetLogFlag(f uint32)

func SetLogMask added in v0.0.6

func SetLogMask(mask uint32)

func SetLogProd added in v0.0.6

func SetLogProd(isProd bool)

Types

type Protocol

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

func New

func New(tag string, r io.Reader, w io.Writer, writeQueueSize int, readCallback func(data []byte), heartbeatTimeoutCallback func(p *Protocol) bool, setFuncBeforeRead func(), setFuncAfterRead func(error), setFuncBeforeWrite func(), setFuncAfterWrite func(error), killCallback func()) *Protocol

New 返回一个protocol实例

tag: 标签,用于区分protocol实例
r: 数据流的reader
w: 数据流的writer
writeQueueSize: 发送等待队列长度
readCallback: 用于处理获取到的数据,每个package中的数据都会完整的保存在data中
heartbeatTimeoutCallback: 心跳请求超时后的处理函数
setFuncBeforeRead: 在reader读取数据前,设置reader的读取截止时间
setFuncBeforeWrite: 在writer发送数据前,设置writer的发送截止时间
killCallback: status被标记为statusKilled时执行,可以用于关闭reader和writer

func (*Protocol) Connect added in v0.1.0

func (p *Protocol) Connect(activeHeartbeatSignalSender bool)

func (*Protocol) GetHeartbeatInterval added in v0.1.0

func (p *Protocol) GetHeartbeatInterval() uint8

func (*Protocol) GetHeartbeatLastReceived

func (p *Protocol) GetHeartbeatLastReceived() int64

func (*Protocol) GetHeartbeatLastSend

func (p *Protocol) GetHeartbeatLastSend() int64

func (*Protocol) GetHeartbeatTimeout added in v0.1.0

func (p *Protocol) GetHeartbeatTimeout() uint8

func (*Protocol) GetRunningRoutine added in v0.1.0

func (p *Protocol) GetRunningRoutine() int32

func (*Protocol) GetTag added in v0.1.0

func (p *Protocol) GetTag() string

func (*Protocol) Kill

func (p *Protocol) Kill()

func (*Protocol) SetHeartbeatInterval added in v0.1.0

func (p *Protocol) SetHeartbeatInterval(interval uint8)

func (*Protocol) SetHeartbeatTimeout added in v0.1.0

func (p *Protocol) SetHeartbeatTimeout(timeout uint8)

func (*Protocol) SetTag added in v0.1.0

func (p *Protocol) SetTag(tag string)

func (*Protocol) WaitKilled added in v0.1.0

func (p *Protocol) WaitKilled(timeout int) error

func (*Protocol) Write

func (p *Protocol) Write(data []byte) error

Write 发送数据

Jump to

Keyboard shortcuts

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