这几天一直写上层逻辑,因为是sns游戏的,所以压力不是很大,但还是想做一套页游mmorpg类游戏的框架。闲暇时候就玩玩天龙八部,读读征途的代码。机缘巧合,遇见了之前天龙八部的服务器引擎工程师,交流了很久才知道,现在网上流传的天龙八部的版本已经很老很老了。据他说现在的天龙八部的服务器框架也加上了网关的设计,负责网络均衡;添加了消息队列,分离了通信和逻辑处理。
不过我仍然觉得旧框架可以负载现在的页游服务器,旧的线程机制是这样,每个线程负责一个地图,并且负责这个地图上面玩家的与客户端的通信、逻辑处理,负责这个地图上面的怪物AI。搜集了一些数据。
send && recv 是系统函数,每秒大概可以执行18w次。(听一个主程讲座记录)
线程每秒可以执行处理15w条消息(前项目所得数据)
线程每秒跑50帧,一帧大概20ms,这20ms可以驱动4k只怪物的AI(查询一个在线游戏所得)
现在我们假设一个线程负责一个地图,这张地图上面,大概有400只怪物,1000人,每人每秒大概3次操作。也就是说要处理大概3k条消息,驱动400只怪物,大概要有6k次的系统调用。发送处理,我们做这样的处理,不能实时的发送给客户端,每个连接每秒发送三次。
这样消息处理占用了20ms,send && recv的系统调用占用了33ms,抛去这些消耗,剩下的CPU资源完全可以驱动这400只怪物。
当然我们的每个线程一定要做成可以配置的,比如对于开服时候的新手村,一定要用独立的线程去负责,其他的70级-80级的地图我们可以让一个线程去负责2-3张地图。那么我们的页游服务器就可以这样设计:
为了保证单线程的逻辑,我们将公共处理的数据比如说帮派,好友放到世界服去处理,另外日志服务器、数据库缓存服务器也独立出来。
既然构架无所谓好坏,那么够用就行,不折腾。
十分期待各位大神,批评指导!!!