Posted on 2012-07-23 13:50
點點滴滴 閱讀(677)
評論(0) 編輯 收藏 引用 所屬分類:
10 服務(wù)器
session管理
一、world核心數(shù)據(jù)結(jié)構(gòu):環(huán)境+session
SessionMap m_sessions;
Queue m_QueuedSessions;
typedef UNORDERED_MAP<uint32, Weather*> WeatherMap;
WeatherMap m_weathers;
二、WorldSession 核心數(shù)據(jù)結(jié)構(gòu) 玩家+信道+消息隊列
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核心數(shù)據(jù)結(jié)構(gòu) map、權(quán)限、社會關(guān)系、管理員?拍賣?談話 存儲 包裹 物品……
概述:所有command緩存在socket的隊列中,各個子系統(tǒng)的總?cè)肟谑莗layer
服務(wù)端每一幀的邏輯:
1、從OS處取出到達(dá)的事件到本進(jìn)程(所有的事件已經(jīng)緩存在socket隊列中)
2、依次調(diào)度各個子系統(tǒng)或子子系統(tǒng)
對于node.js而言,線程調(diào)度、事件緩存、回調(diào)機(jī)制已經(jīng)都實現(xiàn)了,程序員只要實現(xiàn)具體的邏輯和定時器(子系統(tǒng))就可以了