Skip to content

Repository files navigation

基于zinx二次开发为->(websocket版)

  • tcp协议改为websocket
  • 单/双命令配置 DoubleMsgID
    • 单(1001)/主(1)子(1001)命令切换
  • 丰富的demo
  • 新增心跳检测功能
  • 若用到mysql需要安装驱动gorm.io/driver/mysql

案例demo

todo

  • 心跳该为时间轮检测

教程

zinx(TCP版本)

看云-《zinx框架教程-基于Golang的轻量级并发服务器》

简书-《zinx框架教程-基于Golang的轻量级并发服务器》

一、快速上手

代码来自examples->ping

server端

基于zinx框架开发的服务器应用,主函数步骤比较精简,最多只需要3步即可。

funcmain() {
//1 创建一个server句柄,内含初始化 Glog...server:=znet.NewServer()
//2 配置路由server.AddRouter(1, &api.PingRouter{})
//3 开启服务bindAddress:=fmt.Sprintf("%s:%d", global.Object.Host, global.Object.TCPPort)
router:=gin.Default()
router.GET("/", server.Serve)
router.Run(bindAddress)
}

其中(api.PingRouter)自定义路由及业务处理: 代码跳转

client端

zinx的消息处理采用,[MsgLength]|[MsgID]|[Data]的封包格式 代码跳转

zinx配置文件

详细配置文件说明与默认值

{
"Name": "zinx-websocket Demo",
"Host": "127.0.0.1",
"TcpPort": 8999,
"MaxConn": 3,
"WorkerPoolSize": 10,
"LogFile": "zinx.log",
"HeartbeatTime": 60
}

I.服务器模块Server

funcNewServer () ziface.IServer

创建一个zinx服务器句柄,该句柄作为当前服务器应用程序的主枢纽,包括如下功能:

1)开启服务

func (s*Server) Start(c*gin.Context)

2)停止服务

func (s*Server) Stop()

3)运行服务

func (s*Server) Serve(c*gin.Context)

4)注册路由

func (s*Server) AddRouter (msgIduint16, router ziface.IRouter) 

5)注册链接创建Hook函数

func (s*Server) SetOnConnStart(hookFuncfunc (ziface.IConnection))

6)注册链接销毁Hook函数

func (s*Server) SetOnConnStop(hookFuncfunc (ziface.IConnection))

II.路由模块

//实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写typeBaseRouterstruct {}
//这里之所以BaseRouter的方法都为空,// 是因为有的Router不希望有PreHandle或PostHandle// 所以Router全部继承BaseRouter的好处是,不需要实现PreHandle和PostHandle也可以实例化func (br*BaseRouter)PreHandle(req ziface.IRequest){}
func (br*BaseRouter)Handle(req ziface.IRequest){}
func (br*BaseRouter)PostHandle(req ziface.IRequest){}

III.链接模块

1)获取原始的socket TCPConn

func (c*Connection) GetTCPConnection() *net.TCPConn

2)获取链接ID

func (c*Connection) GetConnID() uint32

3)获取远程客户端地址信息

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

4)发送消息

func (c*Connection) SendMsg(msgIDuint32, msgTypeint, data []byte) errorfunc (c*Connection) SendBuffMsg(msgIDuint32, msgTypeint, data []byte) error//默认二进制消息func (c*Connection) SendBinaryMsg(msgIDuint32, data []byte) errorfunc (c*Connection) SendBinaryBuffMsg(msgIDuint32, data []byte) error

5)链接属性

//设置链接属性func (c*Connection) SetProperty(keystring, valueinterface{})
//获取链接属性func (c*Connection) GetProperty(keystring) (interface{}, error)
//移除链接属性func (c*Connection) RemoveProperty(keystring) 

About

zinx-websocket是一款基于Golang轻量级websocket并发游戏框架/服务器框架。zinx websocket

Topics

Resources

Stars

8 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages