Categorygithub.com/sun-fight/zinx-websocket
module
1.1.2
Repository: https://github.com/sun-fight/zinx-websocket.git
Documentation: pkg.go.dev

# README

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

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

案例demo

ping-服务器与客户端的简单通信demo

protobuf-消息协议

doublemsgid-使用主子命令模式

database-支持mysql-redis

todo

  • 心跳该为时间轮检测

教程

zinx(TCP版本)

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

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

一、快速上手

代码来自examples->ping

server端

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

func main() {
//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

  func NewServer () 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 (msgId uint16, router ziface.IRouter) 

5)注册链接创建Hook函数

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

6)注册链接销毁Hook函数

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

II.路由模块

//实现router时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写
type BaseRouter struct {}

//这里之所以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(msgID uint32, msgType int, data []byte) error
func (c *Connection) SendBuffMsg(msgID uint32, msgType int, data []byte) error
//默认二进制消息
func (c *Connection) SendBinaryMsg(msgID uint32, data []byte) error
func (c *Connection) SendBinaryBuffMsg(msgID uint32, data []byte) error

5)链接属性

//设置链接属性
func (c *Connection) SetProperty(key string, value interface{})

//获取链接属性
func (c *Connection) GetProperty(key string) (interface{}, error)

//移除链接属性
func (c *Connection) RemoveProperty(key string) 

# Packages

No description provided by the author
No description provided by the author
Package ziface 主要提供zinx全部抽象层接口定义.
No description provided by the author
No description provided by the author
No description provided by the author