网游服务端技术总结 三

                 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而言,线程调度、事件缓存、回调机制已经都实现了,程序员只要实现具体的逻辑和定时器(子系统)就可以了

猜你喜欢

转载自eric-weitm.iteye.com/blog/1457576