首页 文章 新服务器框架设想(new game frame )
新服务器框架设想(new game frame )
编辑时间:2020-02-13 18:27:14 作者:dashizi 浏览量:354

已有框架:

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


来说两句吧
最新评论