首页 文章 新服务器框架设想(new game frame )
已有框架:
C/C++实现网络层、底层框架层,工具封装层(mysql,xml,json等等)
LUA实现逻辑层,用户数据保存在lua内存中
逻辑单线程,根据线路或者功能多进程的方式实现扩容
服务端之间、服务端与客户端网络支持rpc
自定义序列化消息格式
可以很方便的热更新
痛点:
多进程内存问题最为严重,多个进程各种消耗都是N指数增加
lua的gc效率偏低(功能设计上也有问题,内存碎片过多),多线程成本高
逻辑单线程发挥很有限
http不友好、对接也不方便
数据库只能通过db进程操作,没用redis之类的中间件,也不好用,多进程会容易混乱
进程间通讯复杂
跨服复杂
线上管理复杂
只能状态同步(本身框架不合适,业务逻辑层也不兼容)
不支持udp
新框架的思考:
语言go
个人状态短连接/长链接,开房间战斗用长链接,短连接访问大数据
单服尽量少进程多线程(goroutine)
原生支持连服、跨服
尽量无状态,实时读写个人数据,随时可以重启,当前活动支持进度存储
数据库表设计减少json等大块数据
readis高速缓存频繁数据
消息序列化采用protobuf等通用方案(主要是go是个强类型语言)
docker部署
excel导表等工具重写
尽量设计帧同步,支持UDP
利用好go的单元测试
痛点:
需要考虑热更新或者低风险重启服务器
其他:
1.代码管理从svn改用git
2.尽量使用外网环境,核心涉及安全的代码抽离,不要放线上
资料参考:
GO中文指南(非常细)http://tour.studygolang.com/list
go基础http://c.biancheng.net/golang/或者https://www.runoob.com/go/go-tutorial.html
go中文APIhttps://studygolang.com/pkgdoc
go第三方库收集https://www.jianshu.com/p/94ccafe2a982
go-mysql使用https://www.ctolib.com/topics-143311.html
udp网络库https://github.com/xtaci/kcp-go
go帧同步服务端git https://github.com/bailu1901/lockstepserver
proto3文档https://www.cnblogs.com/tohxyblog/p/8974763.html
msgpack https://msgpack.org/
msgpack-u3d https://github.com/deniszykov/msgpack-unity3d
msgpack-lite https://www.npmjs.com/package/msgpack-lite
msgpack-非常精简https://github.com/ygoe/msgpack.js
docker教程https://www.runoob.com/docker/docker-tutorial.html
markdown在线编辑https://www.mdeditor.com/
导表工具go版https://github.com/davyxu/tabtoy
游戏服务器网络库git https://github.com/davyxu/cellnet
go框架对比 https://www.cnblogs.com/cnxkey/articles/10094951.html
go实现rpc的几种方案 https://studygolang.com/articles/14336
自组代码仓库gogs https://github.com/gogs/gogs/blob/master/README_ZH.md
vscode远程开发 https://blog.csdn.net/Mculover666/article/details/90439669
游戏数据分析系统 https://www.thinkingdata.cn/game.html