Volta 1.12
介绍
Volta框架是一款开源GO Socket框架,提供web项目的高并发通信,Volta支持高并发,超高稳定性,
支持自定义协议。拥有异步MYSQL、异步Redis、异步消息队列等组件
软件架构
App -- 业务层代码
Common -- 公共类、常量
Libs -- 第三方扩展包
Model -- 模型层
Relays -- 控制层
Utils -- 工具类
Bootstrap -- 业务服务注册 包含定时任务、socket请求处理方法注册
Build -- 打包
Config -- 框架配置信息
Core -- 框架核心包
Common -- 公共类、常量
Container -- 容器
Drivers -- mysql/redis等驱动
License -- 启动钥匙
Utils -- 核心工具包
Workers -- 通信核心类
Events -- 通信事件处理类
Monitor -- 心跳
GatewayWorker.go -- websocket服务,负责维护客户端的连接
SwitchWorker.go -- socket服务 负责服务器内同信,与api框架交互,使用tcp短连接
Kernel.go -- 通信服务注册类
CronJob -- 定时任务
Test -- 默认定时任务,很简单,仿照这里的方法即可
Facade -- 服务员,框架内所有的方法都通过facade调用,就问题就问服务员
WorkerContainer -- Facade容器,保存了框架内所有的实例在这里
WorkerInterface -- Facade接口,保存了框架内所有方法的接口在这里
安装教程
1.Volta简洁快速,部署GO环境,执行go run main.go 即可
使用说明
框架内提供的方法已经足以应付绝大部分项目,无序去另外编写自定义方法和协议
如需使用自定义协议和方法见以下方法:
一、首先在App目录内的Relays目录新建一个控制器类,框架已经为你建立了两个默认类,
分别是GatewayRelay.go/SwitchRelay.go 他们分别可以处理客户端、内网其他服务的请求。
二、然后在Bootstrap/App中注册对应方法即可
Container.App.Bind(95000,&Relays.SwitchRelay{},"handle") 参数1:内网api服务请求协议号 参数2:控制器类 参数3:方法名
Container.App.Bind(95001,&Relays.GatewayRelay{},"handle") 参数1:客户端请求协议号 参数2:控制器类 参数3:方法名
三、上面两步完成后剩下的就是业务部分了框架会将发送者的请求信息传递给注册方法,
客户端请求信息为WorkerInstance.WsBody结构体,内网api服务请求信息为WorkerInstance.Protocol结构体,里面包含了session header body等等信息 足够使用了。
推送消息、使用mysql/redis等,调用Facade即可,例子:
Facade.Accessor.WsEvents.SendToUid() 给uid推送消息
Facade.Accessor.WsEvents.IsOnline() 查看uid是否在线
Facade.Accessor.DB().Query() 执行mysql查询语句
Facade.Accessor.Redis().Do() 执行redis命令
最后客户端连接到服务的过程是 客户端发起websocket连接,Volta接收到请求后会返回一个clientId回去,
客户端将clientId通过api接口给api服务,api服务使用socket::bind(clientId,uid)方法,传入clientId和当前用户uid,
这样绑定操作就完成了,Volta就可以给uid推送消息了
参与贡献
leon 创作者