# GoLangServiceForNetGame **Repository Path**: mengtest/GoLangServiceForNetGame ## Basic Information - **Project Name**: GoLangServiceForNetGame - **Description**: 使用golang搭建的基础网游并发服务器框架,支持多种网络协议 适合快速开发,个人开发使用 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-01-07 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README _**********************SicuingNetGameFrameWork&WebViewsFrameWork**********************_ 框架集成了redis数据库基本操作方法,mysql数据库基本操作方法,MongoDB数据库基本操作方法 1:游戏服务器方面:两种RPC注册方式:匿名函数时敏捷开发,结构体方法注册便于架构。 可以根据个人需要选择RPC方法注册方式,推荐使用结构体注册方法,协议层由方法内自行配置, 可以给baseController添加方法将消息解码。框架分布式时需要在config下的server.json加入 新的节点配置,并在启动服务器添加启动参数-ServerName nodeName,当debug模式开启时,服务器 所有的输出都将定向到log目录下 2:框架日志方面:日志采用logger包下的自定义logger.debug -> waring -> mask -> outline -> error ->fatal,并在框架启动和运行时可以调节日志输出的等级,该日志将会打印输出路径和文件行数,可以在idea内直接 索引至改logger行 3:服务器定时任务,定时任务管理器可以添加任意方法进入定时器,设定定时调用频率和定时器指定id, 可以获取到定时器所执行的方法,任务调度器分为四个子任务,将在任务插入时顺序的分配到每个容器内进行调度, 每个容器内的任务在相互独立的线程内运行,最大限度的降低了周期延迟 4:线程安全方面:提供了线程安全的map,Tools工具类内concurrentMap可以轻松构建一个线程安全map, 使用时通过断言判断即可,工具包下集成了字节化数字,字符转化,文件查找,文件遍历,protobuf解码等等功能 5:框架提供了多种协议连接方式,udp,tcp,ws,http等连接方式,只需要在分服驱动中引入组件即可,在分服的handler 结构体中加入成员变量net(netcomponent),并实现handler接口。所有的连接方式注册rpc方式都使用dispatcher下的 addRpcFunc()方法,rpc路由输入为uint32时将会注册入分发器的tcp,udp,ws的rpc池内,输入为string的http路由 时,将会在启动时自动注册http路由,可以很方便的进行各个连接方式的业务注册。 6:框架dispatcher分析:所有的连接方式已配置了dispatcher的调用和分发,将在调用网络组件时自动将客户端消息 进行分类和转发到对应的rpc内,controller层内封装了rpc初始化相关的函数,可以适应在大量并发下的问题,每个消息 对应的rpc将会缓存多份在rpc池内,调用时将会从池内拿出一个没有使用的rpc进行初始化和调用,并在使用完毕后 进行回收,每个rpc元素相互独立,互相隔离,不会产生线程问题。 7:框架基本使用方式介绍:业务管理器组合上baseController类,将会自动实现controller接口,并可注入到 分发器内,每个rpc方法都是无参无返回值的,所有的参数和返回值都在实例成员变量内赋值,简化了rpc方法的书写 难度,不用写过多参数,精简是本框架的主要思想,其中baseController下的addSingleMsg会将消息返回给请求者 addMultiMsg将会将其中的消息返回给所有在线的客户端,极简化的实现了广播功能,但是在具体业务中需要主动 优化会话分类分段,并发送消息,框架只能完成一部分的广播,分播的具体业务实现应该由使用者自行完成 8:Web服务器方面:服务器吸收了beego框架的优秀思想,在实现整体项目的目录结构上更为自由,配置也 在config/ini/config.ini内有很直观的展示,所有的目录应该都使用相对路径,防止linux下出现路 径问题,web框架相对beego更加灵活,使用时应当注意其他的用法基本和beego类似,包括页面传参和请求参 数获取等等 框架分服节点和master的关系:所有节点都将自动注册到master服内,可以通过getInstanceMasterClient获取 该实例,并进行消息发送和接受注册