Swa-server 開源框架
* 適用於中小型遊戲,如:養成、RPG、棋牌等;應用軟件,如:聊天室等
* 已經封套好底層socket管理,sql請求處理、數據加密解密
* 拿來便可開工寫業務
* Swa-server是面向小型快速開發的框架,因此採用單進程模式,之後更新也是單進程方案去解決所遇到的問題,這樣能夠減小開發時間與人力(其實不少服務器用單進程就夠了)mysql
* 支持IO異步(基於boost庫IO)
* 支持sql異步執行(有回調函數)
* 玩家管理器
* 數據庫管理器git
項目中例子
* 一、請求得到動態密碼
* 二、請求登陸(包括mysql查詢處理返回等)github
安裝流程
* 一、安裝一個vs2012
* 二、下載本項目的代碼
* 三、下載第三方庫(boost與mysql),mysql已經編譯好地址:http://pan.baidu.com/s/1qW7b42S,boost版本過大,自行到官網下載,版本爲1.55
* 四、安裝mysql數據庫,並導入項目的sql文件
* 五、編譯運行,使用項目中客戶端測試sql
結構圖:數據庫
Shared爲了個靜態共享庫,該庫主要包括了socket管理,數據庫管理服務器
運行圖框架
服務器啓動過程 (下面代碼):異步
int main(int argc, const char * argv[]) { // 初始化服務器所都要準備好的數據 Init(); // 啓動服務 ServerStart(); // 執行退出的相關操做 RunServerExit(); return 0; } void Init() { // 初始化化協議 InitNetMsg(); // 加載配置 g_rGameCfg.LoadRes( "../conf/gameconfig.xml" ); // 服務器相關配置 const GameConfigInfo& rGameCfgInfo = g_rGameCfg.GetGameConfigInfo(); // 加載服務器須要的資源 g_rResourceMgr.LoadAllRes(rGameCfgInfo.arrConfigPath); // 初始化數據庫 if(DBServerInit(rGameCfgInfo)) { // 初始化Scoket服務 gNetServer = NetServerMgr::Instance()->AddNetServer(); gNetServer->SetAddress( rGameCfgInfo.arrServerHost , rGameCfgInfo.nServerPort); gNetServer->SetHandler( OnNetMsgEnter , OnNetMsg , OnNetMsgExit ); // 初始化待鏈接玩家數據 g_rPlayerMgr.Init(*gNetServer); // 啓動Socket服務 gNetServer->Start(); FLOG4( "SERVER STARTED." ); // 輔助命令初始化 gGameCommand.Init(); } }
啓動過程作好一切初始化的工做,加載配置、建立全部的socket、player、數據庫對象等,而後設置socket鏈接、收到消息、退出的回調函數socket
這裏的socket與player的實例ID是同樣的,他們也綁定在一塊兒管理,這樣很方便函數
當一個socket進來就能夠直接到了player,當一個socket退出,這時會初始化player與socket數據,而後再設定他們從新等待鏈接進入
主要代碼在NetSocket,NetServer,Playaer
NetSocket
NetServer::NetServer() : m_cAcceptor( *this ) { static int32 s_nIncreaseNetServerID = 0; m_nServerID = ++s_nIncreaseNetServerID; for ( int i = 0 ; i < MAX_SOCKET_CONNECT ; i++ ) { m_arrSocket[ i ] = new NetSocket( *this ); } }
Player
void PlayerMgr::Init(NetServer& rNetServer) { for ( int32 i = 0 ; i < MAX_SOCKET_CONNECT ; i++ ) { SWA::NetSocket& pSocket = rNetServer.GetSocket(i); ASSERT(pSocket.SID() == i); m_arrPlayerCache[i] = new Player(pSocket); } }
若是園友想直接用,就直接看例子代碼便可上手,若是想研究瞭解,則多看Shared中的NetSocket,NetServer,NetIOBuffer類等類
若是園友有什麼問題能夠在這裏提問,或聯繫我QQ:296464231
源碼已經放到了github : https://github.com/huangzuduan/swa-server