Posted on 2012-07-23 13:50
點點滴滴 閱讀(671)
評論(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而言,線程調度、事件緩存、回調機制已經都實現了,程序員只要實現具體的邏輯和定時器(子系統)就可以了