gotcp

package module
v0.0.0-...-2799541 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2019 License: MIT Imports: 14 Imported by: 10

README

gotcp

一个GO语言TCP网络库

服务器例子

  1. 组合嵌入gotcp.Session,制作自己的TCP网络会话

    例如:

    type Echo struct {
      gotcp.Session
    }
    
    func (this *Echo) OnRecv(data []byte, flag byte) {
      if this.IsVerified() == false {
        // ...(业务代码,略)...
        this.Verify()
      }
      // ...(业务代码,略)...
    }
    
    func (this *Echo) OnClose() {
      // ...(业务代码,略)...
    }
    
  2. 注册网络会话类,开启服务

    例如:

    s := &gotcp.Server{}
    s.RegisterSessType(Echo{})
    s.Start(":3000")
    

客户端例子

  1. 组合嵌入gotcp.Session,制作自己的TCP网络会话

    例如:

    type Echo struct {
      gotcp.Session
    }
    
    func (this *Echo) OnRecv(data []byte, flag byte) {
      if this.IsVerified() == false {
        // ...(业务代码,略)...
        this.Verify()
      }
      // ...(业务代码,略)...
    }
    
    func (this *Echo) OnClose() {
      // ...(业务代码,略)...
    }
    
  2. 连接服务器

    例如:

    echo := &Echo{}
    echo.Connect("localhost:3000", echo)
    

参考项目

参考了以下开源库:

基准测试

p1 p1

更多的测试

懒得在主页上写了,请参考: https://blog.csdn.net/u013272009/article/details/96873908

Documentation

Index

Constants

View Source
const (
	// DefaultMaxCompressSize : 缺省启动压缩的数据大小
	DefaultMaxCompressSize = 1024

	// DefaultMaxCmdSize : 缺省CMD字段大小
	DefaultMaxCmdSize = 2

	// CmdSizeLimit : CMD字段大小限制
	CmdSizeLimit = 8
)

Variables

View Source
var DefaultRecvBuffSize = 128 * 1024 // 单位:字节

DefaultRecvBuffSize socket 接收缓冲区大小

View Source
var DefaultSendBuffSize = 128 * 1024 // 单位:字节

DefaultSendBuffSize socket 发送缓冲区大小

Functions

func Decode

func Decode(buf []byte, flag byte, msg proto.Message) proto.Message

Decode : 解析数据,获取 protobuf 消息

func DecodeCmd

func DecodeCmd(buf []byte, flag byte, msg proto.Message) proto.Message

DecodeCmd : 解析数据,获取 protobuf 消息

func DecodeCmdEx

func DecodeCmdEx(buf []byte, flag byte, msg proto.Message, maxCmdSize int) proto.Message

DecodeCmdEx : 解析数据,获取 protobuf 消息

func Encode

func Encode(cmd uint64, msg proto.Message) ([]byte, byte, error)

Encode : 将 protobuf 打包

func EncodeCmd

func EncodeCmd(cmd uint64, msg proto.Message) ([]byte, byte, error)

EncodeCmd : 将 CMD字段、protobuf 打包到一起

func EncodeCmdEx

func EncodeCmdEx(cmd uint64, msg proto.Message, maxCompressSize, maxCmdSize int) ([]byte, byte, error)

EncodeCmdEx : 将 CMD字段、protobuf 打包到一起

func GetCmd

func GetCmd(buf []byte) uint64

GetCmd : 获取消息号

func GetCmdEx

func GetCmdEx(buf []byte, maxCmdSize int) uint64

GetCmdEx : 获取消息号

func GetData

func GetData(buf []byte) []byte

GetData : 获取数据

func GetDataEx

func GetDataEx(buf []byte, maxCmdSize int) []byte

GetDataEx : 获取数据

func GetVaildPort

func GetVaildPort(showmsg bool) int

GetVaildPort : 获取 1 个有效的端口

func SetLogger

func SetLogger(log ILogger)

SetLogger : 设置日志类实例

Types

type ByteBuffer

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

ByteBuffer : 缓冲区类

func NewByteBuffer

func NewByteBuffer() *ByteBuffer

NewByteBuffer : 缓冲区类的构造函数

func (*ByteBuffer) Append

func (bytebuffer *ByteBuffer) Append(buff []byte)

Append : 向缓冲区追加数据

func (*ByteBuffer) RdBuf

func (bytebuffer *ByteBuffer) RdBuf() []byte

RdBuf : 获取缓冲区可读取区域

func (*ByteBuffer) RdFlip

func (bytebuffer *ByteBuffer) RdFlip(size int)

RdFlip : 完成读取 size 字节数据

func (*ByteBuffer) RdReady

func (bytebuffer *ByteBuffer) RdReady() bool

RdReady : 是否有数据可读

func (*ByteBuffer) RdSize

func (bytebuffer *ByteBuffer) RdSize() int

RdSize : 获取缓冲区可写入区域大小

func (*ByteBuffer) Reset

func (bytebuffer *ByteBuffer) Reset()

Reset : 重置缓冲区

func (*ByteBuffer) WrBuf

func (bytebuffer *ByteBuffer) WrBuf() []byte

WrBuf : 获取缓冲区可写入区域

func (*ByteBuffer) WrFlip

func (bytebuffer *ByteBuffer) WrFlip(size int)

WrFlip : 完成写入 size 字节数据

func (*ByteBuffer) WrGrow

func (bytebuffer *ByteBuffer) WrGrow(size int)

WrGrow : 如果缓冲区可写入区域大小小于 size ,扩大缓冲区

func (*ByteBuffer) WrSize

func (bytebuffer *ByteBuffer) WrSize() int

WrSize : 获取缓冲区可写入区域大小

type DefaultLogger

type DefaultLogger struct {
}

DefaultLogger : 缺省日志类

func NewDefaultLogger

func NewDefaultLogger() *DefaultLogger

NewDefaultLogger : 缺省日志类的构造函数

func (*DefaultLogger) Error

func (logger *DefaultLogger) Error(args ...interface{})

Error :

func (*DefaultLogger) Errorf

func (logger *DefaultLogger) Errorf(format string, args ...interface{})

Errorf :

func (*DefaultLogger) Info

func (logger *DefaultLogger) Info(args ...interface{})

Info :

func (*DefaultLogger) Infof

func (logger *DefaultLogger) Infof(format string, args ...interface{})

Infof :

type ILogger

type ILogger interface {
	Info(args ...interface{})
	Infof(format string, args ...interface{})
	Error(args ...interface{})
	Errorf(format string, args ...interface{})
}

ILogger : 日志类接口

type ISession

type ISession interface {
	OnRecv(data []byte, flag byte)
	OnClose()
}

ISession : 网络会话类接口

type Server

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

Server : TCP 服务器类

func (*Server) Accept

func (server *Server) Accept(fn func(s interface{})) error

Accept accept

func (*Server) Close

func (server *Server) Close()

Close : 关闭服务器

func (*Server) GetAddress

func (server *Server) GetAddress() string

GetAddress 获取地址

func (*Server) GetRealPort

func (server *Server) GetRealPort() int32

GetRealPort : 获取最终监听的端口

func (*Server) GetSessionType

func (server *Server) GetSessionType() reflect.Type

GetSessionType : 获取 Session 类型

func (*Server) Listen

func (server *Server) Listen(addr string) (err error)

Listen listen

func (*Server) RegisterSessType

func (server *Server) RegisterSessType(v interface{})

RegisterSessType : 注册网络会话类型

func (*Server) SetAddress

func (server *Server) SetAddress(address string, port int32)

SetAddress : 设置地址

func (*Server) SetUnfixedPort

func (server *Server) SetUnfixedPort(v bool)

SetUnfixedPort : 值为 True ,则寻找有效端口去监听

func (*Server) SetUserData

func (server *Server) SetUserData(v interface{})

SetUserData : 设置自定义数据

func (*Server) Start

func (server *Server) Start() bool

Start : 服务器启动

type Session

type Session struct {
	Conn net.Conn

	Derived ISession
	// contains filtered or unexported fields
}

Session : 网络会话类

func (*Session) Close

func (sess *Session) Close()

Close : 关闭网络会话

func (*Session) CloseAfterSending

func (sess *Session) CloseAfterSending()

CloseAfterSending : 数据发送完毕后,关闭连接

func (*Session) CloseSessionOnly

func (sess *Session) CloseSessionOnly()

CloseSessionOnly : 关闭网络会话

func (*Session) Connect

func (sess *Session) Connect(address string, derived ISession) bool

Connect : 连接服务器

func (*Session) Init

func (sess *Session) Init(root context.Context, conn net.Conn, derived ISession)

Init : 初始化

func (*Session) IsClosed

func (sess *Session) IsClosed() bool

IsClosed : 是否已关闭

func (*Session) IsVerified

func (sess *Session) IsVerified() bool

IsVerified : 是否已验证

func (*Session) LocalAddr

func (sess *Session) LocalAddr() string

LocalAddr : 本地 IP 地址

func (*Session) RemoteAddr

func (sess *Session) RemoteAddr() string

RemoteAddr : 远端 IP 地址

func (*Session) Send

func (sess *Session) Send(buffer []byte, flag byte) bool

Send : 发送数据 (buffer 中已包括cmd)

func (*Session) SendEx

func (sess *Session) SendEx(cmd int, buffer []byte, flag byte) bool

SendEx : 发送数据 (buffer 中未包括cmd)

func (*Session) SendMsg

func (sess *Session) SendMsg(cmd uint64, msg proto.Message) bool

SendMsg : 发送 protobuf 消息

func (*Session) SendRaw

func (sess *Session) SendRaw(buffer []byte) bool

SendRaw : 发送原始数据

func (*Session) SetSendBuffSizeLimt

func (sess *Session) SetSendBuffSizeLimt(limit int)

SetSendBuffSizeLimt : 设置发送缓冲区限制

func (*Session) Start

func (sess *Session) Start()

Start : 启动网络会话

func (*Session) Verify

func (sess *Session) Verify()

Verify : 设置已验证标记

Directories

Path Synopsis
example
proto_client
Package main is a generated protocol buffer package.
Package main is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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