1. 程式人生 > >如何搭建微信房卡棋牌原始碼伺服器架構

如何搭建微信房卡棋牌原始碼伺服器架構

 這裡的應用層,指的是CenterServer、LogonServer、LogServer、RoomServer等幾個伺服器,另外還包括遊戲模組的設計。不過遊戲模組和前4個伺服器的設計很不相同。這裡先說一下伺服器應用的詳細設計。

      這上面提到的4個伺服器都需要響應客戶端(這裡的客戶端的意思是泛指)的請求,進行資料庫操作,同時還要能夠配置,以及顯示系統執行的狀態資訊等。這裡會採用MVC模式來組織應用層邏輯。

 圖1  Application層基本結構

      IController從ITCPServiceObserver繼承而來,會與ITCPServerService進行互動,因此它需要解析客戶端發過來的請求,如果需要作資料操作,則轉發給IModel處理。

      IModel從DBServiceObserver繼承而來,一些獲取資料及儲存資料的操作由它完成,這是通過IDatabaseServicer提供的服務完成的。

      IView實現了IObserver介面,主要用來顯示IController和IModel的一些狀態資訊以及其他訊息。

      Applications中的內個Server只要按照其任務實現IController,IModel和IView就行了。

1  Center Server詳細設計

       CenterServer的主要功能是維護遊戲列表和房間資訊。遊戲列表是從ServerInfoDB中載入到的,下面是一個簡略的結構圖。

圖2 CenterServer維護的資訊結構

      因為前面已經詳細介紹了應用層架構,所以這裡只是列出IModel的實現,至於IController的實現,則是解析請求。要麼用ServerList中取出遊戲列表資訊和房間資訊返回之。要麼向ServerList中新增房間,刪除房間以及讓ServerList更新線上人數等。

      CenterServer在處理請求時產生的輸出資訊會讓IView輸出顯示。

2  Logon Server 詳細設計

圖3  LogonServer結構圖

      IController的實現LogonController有以下幾個任務:

      1) 轉發註冊請求給LogonHandler讓其處理;

      2) 轉發登入請求給LogonHander讓其處理;

      3) 定時使用CenterSocket傳送請求給CenterServer, 取回的遊戲列表和房間資訊存入ServerList這中。微信房卡棋牌原始碼搭建(h5.hxforum.com)聯絡方式 170618633533企鵝2952777280 微信Tel17061863533 原始碼出售,售房卡出售,平臺出租

      IModel的實現LogonHandler的主要功能就是註冊使用者以及驗證登入。

      CenterSocket是用來向CenterServer傳送請求的。

      ServerList存的資料和CenterServer中的ServerList一樣,但是其實現不同,它存的是LogonController從CenterServer中取回來的。

3  LogServer詳細設計

      LogServer的實現比較簡單,下面是其結構圖

圖4 LogServer結構圖

      LogServer從IController繼承下來,它接收玩家核查遊戲過程的請求,並將其轉發給LogFetcher處理,處理完成後,將結果返回給玩家。

      LogFetcher實現了IModel, 它的任務很簡單,就是去資料庫取得遊戲過程的日誌。

4  Room Server 詳細設計

      RoomServer是最重要的一類Server,玩家的大多數操作都由它來響應,其結構圖如圖5所示。

 圖5 RoomServer結構圖

      UserManager繼承自IModel, 主要任務是管理線上玩家,RoomController在接收到玩家進入房間的請求後,就會根據玩家的的使用者名稱和密碼從UserInfoDB中載入該玩家的詳細資訊,生成一個UserItem, 加入線上佇列。UserManager同時還會維護一個離線佇列,儲存那些請求離線或者掉線的玩家。

      RoomController實現了IController介面。它主要有以下幾個功能:

      1) 將進入房間的請求交和UserManager處理.

      2) 啟動時通過CenterSocket向CenterServer註冊,關閉時從其中登出,同時定時通過CenterSocket從CenterServer取回遊戲列表和房間資訊(由於空間問題,圖中沒有畫出來,基本和LogonServer差不多)。

      3) 將遊戲相關的請求轉交給TableMgr處理.

      4) 處理聊天及管理請求。

       TableMgr管理著這個房間裡的桌子。而Table則是處理公共棋牌遊戲邏輯的地方。主要包括找椅子坐下,離開等。而具體地遊戲命令比如德州撲克的加註等會由Table轉發給GameModule進行處理。處理結果由RoomController返回給玩家。

5  Game Module詳細設計

      這裡以德州撲克為例,來說明一個遊戲的邏輯的結構,

圖6 德州撲克遊戲模組結構

      這裡雖然給出的是德州撲克的結構圖,但是其他遊戲也有類似的結構。

      每一個遊戲模組都必須要實現兩個介面ITableObserver,遊戲的主要邏輯就在放在這裡面,因為桌子會將玩家的操作資訊轉化以後傳遞過來,所以這裡是處理洗牌,發牌,玩家投注處理的最佳場所。另外一個必須實現的介面是IGameServiceMgr,這個介面是遊戲模組暴露給桌子的工廠介面,桌子通過它才能創建出TexasPokerTableObserver。

      IGameServiceMgr中方法說明:

      1) CreateTableObserver  建立遊戲邏輯處理的實現,這裡會建立並返回TexasPokerTableObserver。

      2) GetGameAttrib  返回遊戲的屬性,主要包括: 遊戲的名稱 ,遊戲描述,遊戲模組的名稱,客戶端模組名稱,遊戲資料庫名稱等

      3) RectifyRoomOption 由於一些遊戲對房間有特殊要求,所以RoomServer需要呼叫這個介面調整房間的一些設定

      4) CreateAndroidUser 建立機器人的監聽者, 其角色相當於現實中的玩家。

      TexasPokerRule主要封裝了德州撲克的一些基本規則,如果選出最大牌型、比較牌型的大小,洗牌,找出贏家等。