posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
整个game server的并发模型 

一 概述 
game server至少要提供如下几类的功能 : 
  1、响应客户端请求-------WorldRunnable 
  2、后台命令  -------CliRunnable 
  3、分布式架构(RMI等) -------MaNGOSsoapRunnable 

可以看到针对这几类功能,mangos都给予了支持。 

二、WorldRunnable响应客户端请求的并发实现 
  game server会提供很多服务,如组队、加好友、交易、走路、战斗……,从宏观上讲这些服务是同时对外提供的,另外IO操作是费时的, 
必须将IO与逻辑处理分开,这样的话一个基本的实现是这样的: 
1、开启IO线程,所有费时的操作交由此处处理   WorldDatabase.ThreadStart(); 
2、利用协程来实现各个子系统,或者利用心跳来实现各个子系统的调度(不能开很多线程,线程代价太高) 

三、Mangos的心跳实现 
void World::Update(uint32 diff) 
  基本上包括几类: 
  1、检查定时器---------------时间 
  2、刷任务 
  3、维护session---------------------人物 
  4、全局环境更新(map、battleGround)--------地点 
  5、处理服务器事件------------------事件 
  6、其他(数据同步、后台调试、IO回调……) 

四、game server运行的机制 
  1、定时器触发 
  2、事件触发(松耦合) 

五、典型的一种service的实现方式 
1、IO协程将cammand入队 
2、worker协程 依次fetch、execute 
   核心数据结构是线程安全的队列