zinx-websocket

module
v1.1.2 Latest Latest
Warning

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

Go to latest
Published: Mar 4, 2022 License: GPL-3.0

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) 

Directories

Path Synopsis
examples
Package ziface 主要提供zinx全部抽象层接口定义.
Package ziface 主要提供zinx全部抽象层接口定义.
zutil

Jump to

Keyboard shortcuts

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