posts - 311, comments - 0, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

(搬运工)网游服务端技术总结 三

Posted on 2012-07-23 13:50 点点滴滴 阅读(626) 评论(0)  编辑 收藏 引用 所属分类: 10 服务器
     session管理 
一、world核心数据结构:环境+session 
SessionMap m_sessions; 
Queue m_QueuedSessions; 
typedef UNORDERED_MAP<uint32, Weather*> WeatherMap; 
        WeatherMap m_weathers; 

二、WorldSession 核心数据结构 玩家+信道+消息队列 
  Player *_player; 
  WorldSocket *m_Socket; 
  ACE_Based::LockedQueue<WorldPacket*, ACE_Thread_Mutex> _recvQueue; // 每个session有一个消息队列 

整个session就是不停的fetch,处理msg的过程 
  OpcodeHandler const& opHandle = opcodeTable[packet->GetOpcode()];  // 利用一次映射找到handler 
handle_input_payload----int WorldSocket::ProcessIncoming (WorldPacket* new_pct)--------void WorldSession::QueuePacket(WorldPacket* new_packet) 


三、player核心数据结构 map、权限、社会关系、管理员?拍卖?谈话 存储 包裹 物品…… 


概述:所有command缓存在socket的队列中,各个子系统的总入口是player 


服务端每一帧的逻辑: 
1、从OS处取出到达的事件到本进程(所有的事件已经缓存在socket队列中) 
2、依次调度各个子系统或子子系统 

对于node.js而言,线程调度、事件缓存、回调机制已经都实现了,程序员只要实现具体的逻辑和定时器(子系统)就可以了