db的包傳送結構:
cdatapacket& retpack = allocprotopacket(dcquery);
(1):cdatapacket& clogicdbreqesthandler::allocprotopacket(const jxsrvdef::intersrvcmd ncmd)
(2):cdatapacket& cdbdataclient::allocdatapacket(const jxsrvdef::intersrvcmd ncmd)
(3):
cdatapacket& ccustomjxserverclientsocket::allocprotopacket(const jxsrvdef::intersrvcmd ncmd)
(4):
inline cdatapacket& allocsendpacket()
(5):
void csendpacketpool::allocsendpacketlist(cbaselist& packetlist, int_ptr nalloccount, cdatapacket **ppsinglealloc)
else
ncount = m_freesendpacklist.count();
}if ( ppsinglealloc && ncount > 0 )
//仍不足需求數量則繼續申請
if ( ppsinglealloc || nalloccount > 0 )
//將剩餘申請的資料報拷貝到申請列表中
if ( nalloccount > 0 )
//需要申請乙個單獨的資料報
if ( ppsinglealloc )
}m_freesendpacklist.unlock();
}引擎的db傳送結構:
cdatapacket& datapacket = m_pentity->allocpacket(ap);
(1):
#ifdef _debug
cdatapacket& cactor::_allocpacket(cactorpacket &pack, lpcstr file, int_ptr line)
#else
cdatapacket& cactor::allocpacket(cactorpacket &pack)
#endif
pack.packet->reserve(pack.packet->getposition()+sizeof(gatemsghdr));
pgatemsghdr phdr = (pgatemsghdr)pack.packet->getoffsetptr();//保留協議頭部分
pack.nhdrpos = pack.packet->getposition();
phdr->dwgatecode = rungatecode;
phdr->nsocket = m_nusersocket;
phdr->wsessionidx= (word)m_ngatesessionindex;
phdr->wident = gm_data;
phdr->wserveridx = m_nserversessionindex;
phdr->ndatasize = 0;
phdr->wtemp = runtempcode;
phdr->tickcount = _gettickcount();
pack.packet->adjustoffset(sizeof(gatemsghdr));
pack.pactor = this;
return *pack.packet;
}會話的傳送結構:
cdatapacket &out = allocprotopacket(scheckpasswdresult);
(1):直接引用基類函式:cdatapacket& ccustomjxserverclientsocket::allocprotopacket(const jxsrvdef::intersrvcmd ncmd)
(2):
void ccustomjxserverclientsocket::flushprotopacket(cdatapacket& packet)
ppackhdr->len = (word)ndatasize;
flushsendpacket(packet);
}總結:通過記憶體池申請包,傳送包放到緩衝列表,執行緒從緩衝列表拿到資料進行**。再進行解析,獲取資料.資料獲取
完畢以後還要返回給記憶體池,
通用包結構:
其它發給引擎的話一般用到的是:
customjxserverclientsocket.cpp這個檔案的申請
引擎發給引擎的話一般用到的是:customjxclientsocket.cpp這個檔案的申請(因為傳送給不同客戶的)
當前的幾種開源遊戲服務端介紹
pomelo pomelo 是基於 node.js 的高效能 分布式遊戲伺服器框架。它包括基礎的開發框架和相關的擴充套件元件 庫和工具包 可以幫助你省去遊戲開發枯燥中的重複勞動和底層邏輯的開發。pomelo 不但適用於遊戲伺服器開發,也可用於開發高實時 web 應用,它的分布式架構可以使 pomel...
遊戲服務端定時器的實現
最近在看過一些定時器相關的資料,也讀了一些 比如雲風的skynet的定時器實現,小有啟發,因此將所得整理記錄下來。通常,乙個定時器模組會提供以下三個介面 reg tick timeout,callback unreg tick tick id update timer reg tick註冊乙個tic...
網路遊戲服務端的多執行緒模型
上周四公司有乙個服務端程式的交流,中間討論到如何有效利用現在伺服器的多核優勢,提高單服的負載。稍有經驗的網路遊戲服務端開發人員,首先會想說把檔案讀寫等操作慢速裝置的操作獨立出來,變成單獨的執行緒,那麼我們可能會把網路io,以及檔案log獨立出來,用單獨的執行緒處理。如果乙個遊戲伺服器,僅開了幾個io...