技术路线

开发语言

服务器和客户端都使用typescript来开发,并且双端使用同一种语言可以共享逻辑代码。
typescript是javascript的超集,最终会编译成javacsript使用,在大型项目的体验远胜过javascript。

开发框架和引擎

客户端采用laya引擎
服务器采用nodejs
两端通过socket.io来通信,保持长链接。
因为微信小游戏必须是https的连接,用nginx做了反向代理。

服务器拓扑

层级图如下:


层级拓扑.jpeg

TopCenter: 集群中心(唯一)
Center:中心(一台物理机器一个)
Game:游戏服务器(一般一台物理机器可以开多个)
Gate:网关(和客户端通信,一般一个游戏开2个足够)
nginx: 反向代理。

服务器集群

分为三个集群:测试,提审,正式;这三个集群不互通包括数据库。
对应微信小游戏的后台就是体验,提审和正式。
测试服是可以使用GM命令来测试的,并且充值任何都是1块钱(省钱)。
提审和正式则没有。
通过正式集群数据库的版本号的配置,来确定客户端登入哪一个集群。

服务器压力测试

采购腾讯云4核(2.7/3.3GHZ)16GB的服务器,承载5000人
此时cpu大概在50%,内存占25%
每个服务器进入1500人,那么峰值一般在300-500,那么1台机器可以开10台服务器。随着时间过去,人数减少,一台物理服务器可以承载更多。

自动开服

一般在一台云服务器配置10个游戏服务器(game),在数据库配置好这些服务器的开服时间,到了时间才能被客户端检索到,也就自动开了。
客户端选择服务器的逻辑是,有登录就进最近的登录的游戏服,否则就进最新开的服务器。

数据库

TopCenter集群中心用mysql数据库,每日自动备份
Center用levelDB数据库,因为levelDB是文件数据库,只能在每次重启时备份。

服务器维护

正式服维护,就是把提审服的代码同步到所有物理机器。
使用nodejs的pm2作为运维工具,可以做到秒级的重启。
但是游戏内的玩家需要存档,预计要几分钟。
并且Center用levelDB数据库是文件数据库,不能热备,只能重启时备份。
所以一般的服务器更新需要半个小时左右。

客户端版本管理

客户端只有一条主干,并没有使用分支开发。
新开发的功能在数据库屏蔽掉其入口即可,如果放出,只需要解除屏蔽即可。

GM权限

在测试服GM可以使用GM指令。
在正式服的服务器列表,GM可以看到所有服务器,也可以进入未到开放时间的服务器,不受开服时间的限制。

一些特殊的机制

相同的游戏角色,新的会顶掉旧的登录,比如网页微信会顶掉手机微信。
角色离线后,三十分钟会踢出游戏(此时再重连会回到登录)。
ios离开(息屏,切换等)超过10秒,会立即重连服务器。(ios网络断线难以判定,比较粗暴的做法。)
充值付费领取的奖励,必须手动点掉,这次不点下次上线会再次弹出。(防止玩家误判)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容